在实际项目测试中,功能测试主要负责业务测试,产品迭代、回归测试等,自动化测试主要将用例转化为自动化并提供测试工具等,这样情况下,可以一个自动化测试项目下有很多个不同的模块,每个模块的负责测试又不一样,在跑自动化测试的时候,每个模块需要单独跑自己的自动化就行,但是有时候模块之间又是相互依赖的,那怎么在执行模块自动化用例的时候,自动去发现依赖的用例并执行呢?
举个实际的场景如下:
业务模块 A --->测试 A ,业务模块 B --->测试 B, 业务模块 C --->测试 C,其中 模块 B 依赖模块 A, 模块 C 依赖模块 A 和模块 B,简单的自动化测试如下:

在执行模块 A 的时候只需要执行 TestAAA,但是执行模块 B 的时候,需要先执行 TestAAA.test_a, 怎么去自动发现并执行呢?

全局变量

# global_data.py 

class GlobalData:
    hello = "world"
    num_list = [1, 2, 3, 4, 5, 6, 7, 8, 9]
    user = {"name": "admin", "age": 23, "city": "shanghai"}

模块 A 测试用例


from global_data import GlobalData


class TestAAA:
    def setup_class(self):
        print("\nTestAAA测试用例,setup_class中只执行一次\n")

    def teardown_class(self):
        print("\nTestAAA测试用例,teardown_class中只执行一次\n")

    def test_demo(self):
        print("这个是TestAAA的test_demo用例")

    def test_a(self):
        print("这个是测试用例AAA")
        setattr(GlobalData, "token", "securt_token")
        print("全局变量:", GlobalData.__dict__)

模块 B 测试用例

from global_data import GlobalData

class TestBBB():
    def setup_class(self):
        print("\nTestBBB测试用例,setup_class中只执行一次\n")

    def teardown_class(self):
        print("\nTestBBB测试用例,teardown_class中只执行一次\n")

    def test_demo(self):
        print("这个是TestBBB的test_demo用例")

    def test_b(self):
        print("这个是测试用例BBB")
        token = getattr(GlobalData, "token")
        print("token=", token)
        setattr(GlobalData, "order_id", 123456)
        print("全局变量:", GlobalData.__dict__)

模块 C 测试用例

from global_data import GlobalData

class TestCCC:
    def setup_class(self):
        print("\nTestCCC测试用例,setup_class中只执行一次\n")

    def teardown_class(self):
        print("\nTestCCC测试用例,teardown_class中只执行一次\n")

    def test_demo(self):
        print("这个是TestCCC的test_demo用例")

    def test_c(self):
        print("这个是测试用例CCC")
        token = getattr(GlobalData, "token")
        order_id = getattr(GlobalData, "order_id")
        print("token=", token)
        print("order_id=", order_id)
        print("全局变量:", GlobalData.__dict__)

目前想实现的需求如下:
1、测试 A 需要执行 模块 A 的测试用例的时候,执行 pytest -vs test_AAA.py 此时用例 TestAAA 正常执行

2、测试 B 需要执行 模块 B 的测试用例的时候,执行 pytest -vs test_BBB.py 此时用例 TestAAA --->TestBBB 正常执行

3、测试 C 需要执行 模块 B 的测试用例的时候,执行 pytest -vs test_CCC.py 此时用例 TestAAA --->TestBBB --->TestCCC 正常执行

那么 怎么处理这个模块间的依赖呢? 想到可以全部导入模块的用例,但是在执行模块 B 的用例的时候模块 A 的用例不一定全部执行,只需要部分就行

最后一个问题:
测试 A 执行完用例后,测试报告都是 TestAAA 的结果,
测试 AB 执行完用例后,测试报告都是 TestBBB 的结果,
测试 C 执行完用例后,测试报告都是 TestCCC 的结果,
因为测试 C 只负责模块 C 的测试,并不需要知道模块 A 和模块 B 的测试结果,,所以测试报告只需要模块 TestCCC 的结果就行,
那么 怎么在测试报告中忽略这种呢?


↙↙↙阅读原文可查看相关链接,并与作者交流