如果脚本中有很多的魔法数据,那代码的复用性就不会很高,所以我们需要将测试数据和脚本分离。
思路:将测试数据放在一个json文件中,然后写一个读取json文件的基类,测试用例中通过调基类中方法来获取json文件中测试数据。
S1:先在框架中建立一个json文件DataResource.json,用于存放测试数据
{ "pm": { "userName": "test1", "password": "123456" }, "gov": { "userName": "test2", "password": "123456" } }
S2:建立读取json文件的基类BaseJson.py
# -*- coding:utf-8 -*- import json class Dict(dict): __setattr__ = dict.__setitem__ __getattr__ = dict.__getitem__ def dict_to_object(dict_obj): if not isinstance(dict_obj, dict): return dict_obj inst = Dict()#类实例化 #循环遍历字典的key、value for k, v in dict_obj.items(): inst[k] = v return inst #获取json文件内容 def get_json(): path = r'E://testing_code/code/SmartSiteTestScript/data/DataResource.json' with open(path, encoding='utf-8') as f: return dict_to_object(json.loads(f.read()))#读取json文件内容(字符串类型),通过json.loads()将字符串转换成字典
S3:测试用例中通过调基类中方法来获取json文件中测试数据
import unittest from src.pages.home.Login import Login from config import DriverConfigure #测试用例 class Test1(unittest.TestCase): @classmethod def setUpClass(cls): driver = DriverConfigure.get_driver() cls.driver = driver json_obj =BaseJson.get_json() cls.json_obj =json_obj def setUp(self): self.login_page = Login(self.driver) self.user = self.json_obj['pm']['userName']#获取用户名测试数据 self.pwd = self.json_obj['pm']['password']#获取密码测试数据 def test_a_login_in(self): # 登录 self.login_page.login_in(self.user, self.pwd) def tearDown(self): pass @classmethod def tearDownClass(cls): cls.driver.quit() if __name__ == '__main__': unittest.main()
这样就可以实现测试数据和脚本的分离啦!