数据分离测试框架是一种测试框架设计模式,旨在将测试数据与测试逻辑分离,以提高测试用例的可维护性、可读性和复用性。这种框架通常用于自动化测试,特别是在接口测试、UI 测试和集成测试中非常有用。
在数据分离测试框架中,测试数据通常存储在外部文件(如 Excel、CSV、JSON 等)中,而测试逻辑则编写在测试用例中。通过将测试数据与测试逻辑分开,可以实现以下优势:
-
易维护性:测试数据的变化不会影响测试逻辑,反之亦然。当测试数据需要更新时,只需修改数据文件而不必修改测试用例代码。
-
可读性:测试用例更加清晰易读,因为数据被独立出来并以结构化的方式存储在外部文件中。
-
复用性:可以重复使用相同的测试逻辑,只需提供不同的测试数据即可运行多个测试场景。
-
扩展性:随着测试需求的增加,可以很容易地添加新的测试数据文件,而无需改动现有的测试用例。
-
灵活性:可以使用不同类型的数据文件进行数据分离,根据具体需求选择最适合的数据存储格式。
数据分离测试框架通常包括数据读取工具、测试逻辑编写、日志记录和报告生成等功能。通过有效地组织和管理测试数据,测试团队可以更高效地执行测试,并快速准确地识别潜在的问题。
开发一个复杂的数据驱动测试框架涉及到多个方面,包括数据读取、日志记录、邮件发送、配置文件使用以及清晰的代码目录结构等。让我们一步一步来完成这个任务。
1.创建项目目录结构
首先,创建一个新的项目目录结构,并包含以下子目录和文件:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | data_driven_testing_framework/ ├── configs/ │ └── config.ini ├── data/ │ └── test_data.xlsx ├── logs/ ├── tests/ │ ├── __init__.py │ └── test_sample.py ├── utils/ │ ├── __init__.py │ ├── excel_reader.py │ ├── logger.py │ ├── mailer.py └── pytest.ini |
2.安装所需库
确保安装所需的库:
1 | pip install pytest openpyxl configparser logging yagmail |
3.编写配置文件
在 configs/config.ini
中定义配置参数:
1 2 3 4 5 6 | [EMAIL] email_address = [email protected] email_password = your_email_password [LOGGING] log_file = logs/test.log |
4. 编写工具类
在 utils/excel_reader.py
中编写 Excel 数据读取工具类:
1 2 3 4 5 6 7 8 9 10 11 | import openpyxl class ExcelReader: @staticmethod def read_data(file_path): wb = openpyxl.load_workbook(file_path) sheet = wb.active data = [] for row in sheet.iter_rows(min_row = 2 , values_only = True ): data.append(row) return data |
在 utils/logger.py
中编写日志记录工具类:
1 2 3 4 5 6 7 8 9 | import logging import configparser config = configparser.ConfigParser() config.read( 'configs/config.ini' ) log_file = config[ 'LOGGING' ][ 'log_file' ] logging.basicConfig(filename = log_file, level = logging.INFO, format = '%(asctime)s - %(levelname)s - %(message)s' ) |
在 utils/mailer.py
中编写发送邮件工具类:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | import yagmail import configparser config = configparser.ConfigParser() config.read( 'configs/config.ini' ) email_address = config[ 'EMAIL' ][ 'email_address' ] email_password = config[ 'EMAIL' ][ 'email_password' ] class Mailer: @staticmethod def send_email(subject, contents): yag = yagmail.SMTP(email_address, email_password) yag.send(to = email_address, subject = subject, contents = contents) |
5.编写测试用例
在 tests/test_sample.py
中编写测试用例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | import pytest from utils.excel_reader import ExcelReader from utils.logger import logging from utils.mailer import Mailer test_data_file = 'data/test_data.xlsx' @pytest .mark.parametrize( "data" , ExcelReader.read_data(test_data_file)) def test_data_driven(data): logging.info(f "Running test with data: {data}" ) # Your test logic here assert True def test_send_email(): Mailer.send_email( "Test Email" , "This is a test email sent from the data-driven testing framework" ) |
6.运行测试
现在你可以使用 Pytest 来运行测试。在命令行中执行以下命令:
7.实际使用示例
在接口测试中,你可以使用这个框架来执行数据驱动测试。例如,你可以从 Excel 文件中读取测试数据,然后在测试用例中使用这些数据来调用接口,并断言结果是否符合预期。
7.1准备测试数据
首先,准备一个 Excel 文件,例如 test_data.xlsx
,其中包含了不同的测试数据。假设我们要测试一个登录接口,测试数据文件内容如下:
Username | Password |
---|
user1 | password1 |
user2 | password2 |
user3 | password3 |
7.2编写测试用例
在 tests/test_sample.py
中编写测试用例,使用数据驱动的方式来运行测试:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | import pytest from utils.excel_reader import ExcelReader from utils.logger import logging from utils.mailer import Mailer from your_api_client_module import APIClient # 导入你的 API 客户端模块 test_data_file = 'data/test_data.xlsx' @pytest .mark.parametrize( "username, password" , ExcelReader.read_data(test_data_file)) def test_login_api(username, password): logging.info(f "Running test with data: Username - {username}, Password - {password}" ) # 使用测试数据调用登录接口 api_client = APIClient() response = api_client.login(username, password) # 断言登录结果是否符合预期 assert response.status_code = = 200 assert 'token' in response.json() def test_send_email(): Mailer.send_email( "Test Email" , "This is a test email sent from the data-driven testing framework" ) |
在上面的示例中,我们使用 @pytest.mark.parametrize
注解来指定参数化测试数据,并在测试用例中使用这些数据来调用登录接口。通过这种方式,你可以轻松地对不同的输入数据进行测试,而无需为每组数据编写单独的测试用例。
最后感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走! 希望能帮助到你!【100%无套路免费领取】
![](/image/aHR0cHM6Ly9pbWctYmxvZy5jc2RuaW1nLmNuL2RpcmVjdC9kYjdlM2FhOWUxYmM0MzY5YmIxZWViNTkzNzBhMzIzYi5wbmc%3D)
![](/image/aHR0cHM6Ly9pbWctYmxvZy5jc2RuaW1nLmNuLzBlZGFmMTk4ZGIwNDQ0ZDE5MzA5ZDFkZTEzZjBiMjA5LnBuZw%3D%3D)