这里我们提供了使用测试用例集的工程示例(点击下载)。说明:目前仅支持Python版本,需结合PyUnit使用。
# 1、测试工程目录
- case:测试用例文件目录
- libs:基础操作文件目录,比如env.py封装环境初始化和清理操作
- test.py:入口文件
# 2、入口文件
test.py中主要包括:初始化上下文环境,生成测试套件执行,清理环境
# -*- coding: utf-8 -*- import sys import unittest reload(sys) sys.path.append("./") sys.setdefaultencoding("utf-8") from libs import env from case import TestGameCase from case import TestRankCase if __name__ == "__main__": #初始化上下文环境 env.env_setup() #生成测试套件,执行 suite = unittest.TestSuite() tests = [TestGameCase("test_enter_game"), TestRankCase("test_rank")] suite.addTests(tests) runner = unittest.TextTestRunner(verbosity=2) runner.run(suite) #清理上下文环境,释放资源 env.env_teardown()
# 3、初始化和清理环境
初始化时会生成全局唯一CaseContext实例,仅能在测试用例执行完成后释放,否则用例执行会报错
- libs/env.py:
# -*- coding: utf-8 -*-
from mini_game_test_case_py.case.MiniGameTestTools import MiniGameTestTools
from mini_game_test_case_py.lib import Logger
TEST_TOOL = None
TEST_CONTEXT = None
def env_setup():
'''
初始化上下文环境,生成CaseContext唯一实例
:return:
'''
global TEST_TOOL, TEST_CONTEXT
if TEST_TOOL == None:
TEST_TOOL = MiniGameTestTools(if_guard=True)
TEST_CONTEXT = TEST_TOOL.context
Logger.info('env startup')
return TEST_CONTEXT
def env_teardown():
'''
清理环境
:return:
'''
global TEST_TOOL
if TEST_TOOL != None:
TEST_TOOL.stop()
Logger.info('env tear down')
# 4、编写测试用例
case/test_base.py:测试用例基类TestBaseCase,获取全局context实例
# -*- coding: utf-8 -*- import unittest from mini_game_test_case_py.lib import Logger from libs import env class TestBaseCase(unittest.TestCase): @classmethod def setUpClass(cls): Logger.info('setUpClass') cls.context = env.env_setup()
case/test_game.py:测试游戏主场景用例,继承TestBaseCase,在setUp()函数中获取context实例
# -*- coding: utf-8 -*- from mini_game_test_case_py.lib import Logger from mini_game_test_case_py.lib import Asserts from test_base import TestBaseCase class TestGameCase(TestBaseCase): def setUp(self): self.context = self.__class__.context def tearDown(self): pass def test_enter_game(self): Logger.info("case start") self.context.sleep(10 * 1000) #进入游戏 path = u"{laya.display.Stage[nodeType=laya.display.Stage|covered=false]}>{laya.display.Sprite[index=0|nodeType=laya.display.Sprite|covered=false]}>{laya.display.Sprite[index=2|nodeType=laya.display.Sprite]}>{laya.display.Sprite[index=2|nodeType=laya.display.Sprite|covered=false]}" node = self.context.find_path(path) Asserts.assert_nodeselector_exists(node) node.tap() self.context.sleep(1000) self.context.tap(0.5, 0.5, is_per=True) self.context.sleep(5000) Logger.info("case end")
case/test_rank.py:测试排行榜用例文件
# -*- coding: utf-8 -*- from mini_game_test_case_py.lib import Logger from mini_game_test_case_py.lib import Asserts from test_base import TestBaseCase class TestRankCase(TestBaseCase): def setUp(self): self.context = self.__class__.context def tearDown(self): pass def test_rank(self): Logger.info("case start") self.context.sleep(1000) #查看排行榜 path = u"{laya.display.Stage[nodeType=laya.display.Stage|covered=false]}>{laya.display.Sprite[index=0|nodeType=laya.display.Sprite|covered=false]}>{laya.display.Sprite[index=5|nodeType=laya.display.Sprite|covered=false]}>{laya.display.Sprite[index=3|nodeType=laya.display.Sprite|covered=false]}" node = self.context.find_path(path) Asserts.assert_nodeselector_exists(node) node.tap() self.context.sleep(6000) Logger.info("case end")
# 5、执行用例
- 本地执行
通过命令行进入test.py所在目录,执行命令,运行Case:
python test.py -t ide -p {port} # port为刚才命令行工具设置的端口(如9421)
云测试执行
(1)打包:zip包根目录下必须包含test.py文件,不能有上一级目录
(2)提交到云测试平台并提交测试,测试日志如下: