这里我们提供了使用测试用例集的工程示例(点击下载)。说明:目前仅支持 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)提交到云测试平台并提交测试,测试日志如下:

    选择节点