接口测试 - python - 接口依赖(上个用例的结果在下个用例之间使用)

1. 同一个文件

方法1:使用全局变量

import unittest


bb = 0


class Test_1(unittest.TestCase):
    def test_101(self):
        global bb
        bb = 33
        print(f'in test101 bb={bb}')

    def test_102(self):
        print(f'in test102 bb={bb}')


class Test_2(unittest.TestCase):
    def test_201(self):
        print(f'in test202 bb={bb}')


if __name__ == '__main__':
    unittest.main()

打印结果:

in test101 bb=33
in test102 bb=33
in test202 bb=33

 

方法2:使用静态方法

import unittest


class MyTest_1(unittest.TestCase):
    def setUp(self) -> None:
        pass

    def tearDown(self) -> None:
        pass

    @staticmethod
    def login():  # 定义静态方法
        token = '123'
        return token

    def test_101(self):
        token = self.login()  # 测试前调用一下
        print(f'in 101 token is {token}')

    def test_102(self):
        token = self.login()
        print(f'in 102 token is {token}')


class MyTest_2(unittest.TestCase):
    def setUp(self) -> None:
        pass

    def tearDown(self) -> None:
        pass

    def test_201(self):
        token = MyTest_1.login()  # 其他类调用
        print(f'in 201 token is {token}')


if __name__ == '__main__':
    unittest.main()

打印结果:

in 101 token is 123
in 102 token is 123
in 201 token is 123

 

 

 

2. 不同文件

方法1:新建一个文件,将f1.py产生的结果写入到文件中,f2.py再来读取这个文件中的值(也可以采用excel等其他文件格式)

f1.py

class Test_1(TestBase):
    def test_1(self):
        aa = 888888
        with open('./1.txt', 'wt') as f:
            f.write(str(aa))
        print(f'in test1 aa={aa}')

f2.py

class Test_3(TestBase):
    def test_3(self):
        with open('./1.txt', 'rt') as ff:
            data = ff.readlines()

        print(f'in test3 data={str(data)}')

 

方法2:提取testbase,其他测试类继承该类

f1.py

import unittest


class TestBase(unittest.TestCase):
    def setUp(self) -> None:
        self.token = '123'

    def tearDown(self) -> None:
        pass

f2.py

from f1 import TestBase
import unittest


class MyTest_1(TestBase):
    def test_101(self):
        print(f'in 101 token is {self.token}')

    def test_102(self):
        print(f'in 102 token is {self.token}')


class MyTest_2(TestBase):
    def test_201(self):
        print(f'in 201 token is {self.token}')


if __name__ == '__main__':
    unittest.main()

f3.py

from f1 import TestBase
import unittest


class MyTest_3(TestBase):
    def test_301(self):
        print(f'in 301 token is {self.token}')


if __name__ == '__main__':
    unittest.main()

 

方法3:使用跨文件的全局变量

global.py

def _init():
    global g_dict
    g_dict = {}


def set_value(key, value):
    g_dict[key] = value


def get_value(key, default='get_gl_error'):
    try:
        return g_dict[key]
    except Exception as msg:
        print(msg)
        return default

f1.py

import f1
import unittest


f1._init()


class MyTest_1(unittest.TestCase):
    def setUp(self) -> None:
        pass

    def tearDown(self) -> None:
        pass

    def test_101(self):
        f1.set_value('token', '123')

    def test_102(self):
        token = f1.get_value('token')
        print(f'in 102 token is {token}')


class MyTest_2(unittest.TestCase):
    def setUp(self) -> None:
        pass

    def tearDown(self) -> None:
        pass

    def test_201(self):
        token = f1.get_value('token')
        print(f'in 201 token is {token}')


if __name__ == '__main__':
    unittest.main()

打印结果:

in 102 token is 123

in 201 token is 123

 

方法4:定义单例模式的实例变量

单例模式,只有一个实例,测试登录的时候,给这个实例添加一个实例变量,后续的接口要依赖登录的token,直接从实例变量中获取即可。

(设计模式有待学习)

 

posted @ 2022-02-28 14:13  小虫虫大虫虫  阅读(298)  评论(0编辑  收藏  举报