项目框架如下图所示:
没有获取动态目录之前,我们在测试用例读取excel内容时需要写上绝对路径,如果在多个py文件中都这样定义,excel文件路径发生变化时,维护起来相对麻烦,接下来就来看下如何动态获取文件路径? test.login.py内容如下:
import unittest from funcs import login from common.excel import read_excel from ddt import ddt, data # r :\不转义 file_path = r'D:\PycharmProjects\框架搭建\data\cases.xlsx' excel_data = read_excel(file_path, 'Sheet1') @ddt class TestLogin(unittest.TestCase): @data(*excel_data) def test_login(self, row): # row表示每次从data这个list当住取出一个数据 # 代表一组测试数据,相当于for row in data # 但不同点在于:会自动生成一个新的测试用例方法test_login_1() params_str = row['data'] params = eval(params_str) username = params['username'] pwd = params['pwd'] expected = eval(row['expected']) actual = login(username, pwd) self.assertEqual(expected, actual)
动态获取文件路径,使用py文件作为配置文件相对简单,直接导入变量就可以,且该项目是基于python的,我们在config目录下创建config.py文件,实现动态获取excel文件的路径:
import os # 获取当前文件的绝对路径 current_file = os.path.abspath(__file__) # print(current_file) # 获取当前文件所在目录 current_dir = os.path.dirname(current_file) # print(current_dir) # 获取当前文件所在项目 current_obj = os.path.dirname(current_dir) # print(current_obj) # 获取测试数据的所在目录 config_dir = os.path.join(current_obj, 'data') # 获取cases.xlsx文件的绝对路径 config_file = os.path.join(config_dir, 'cases.xlsx') # print(config_file)
可以看出我们在config.py内定义了多个变量进行动态获取目录及文件的绝对路径,我们可以打印出各变量的具体输出内容:
此时,test.login.py可以修改为:
import unittest from funcs import login from common.excel import read_excel from ddt import ddt, data from config.config import config_file # r :\不转义 # file_path = r'D:\PycharmProjects\框架搭建\data\cases.xlsx' # excel_data = read_excel(file_path, 'Sheet1') excel_data = read_excel(config_file, 'Sheet1') @ddt class TestLogin(unittest.TestCase): @data(*excel_data) def test_login(self, row): # row表示每次从data这个list当住取出一个数据 # 代表一组测试数据,相当于for row in data # 但不同点在于:会自动生成一个新的测试用例方法test_login_1() params_str = row['data'] params = eval(params_str) username = params['username'] pwd = params['pwd'] expected = eval(row['expected']) actual = login(username, pwd) self.assertEqual(expected, actual)