PyDataTest
数据驱动的Python测试框架
| English | 简体中文 |
文档
简介
旨在提供一种编写测试用例的简单方法,尤其是在使用不同的数据输入和输出测试相同的逻辑时。因此,PyDataTest 提供了一套工具用来基于数据进行测试。
安装
pip install pydatatest # with pip
poetry add pydatatest # or with poetry
pipenv add pydatatest # with pipenv
使用
- 创建一个runner实例
runner = pydatatest.runner()
- 编写一个测试用例并注入数据,包括输入和输出
data = [["abc","123"], ['aaa',"000000"]] @inject_def(['passport', 'password'], session=True) @test_with(runner) # 注册用例,也可以通过runner名称进行注册, 如: @test_with("runner1") class TestUserLogin(PyDataTestCase): def setUp(self): print("login test start\n") @inject(["abc", "123456"]) def test_01(self): self.assertEqual(self.passport, 'hitest') @inject(data, True) def test_02(self): self.assertEqual(self.password, '111111') def tearDown(self): print("login test end\n")
- 通过PyDataTest运行起来
runner.run()
API
runner
框架实例,用来运行所有的测试用例
Example:
r = pydatatest.runner("my runner") r.add_test(testcase) # 手动添加一个测试用例 r.run() # 运行所有测试用例
PyDataTestCase
测试用例组,用来组织测试用例
属性:
- session: 获取session, 可以用来在不同的用例方法之间传递数据和共享状态(尤其是HTTP的登录状态等)
- injected variables: 可以在用例方法中通过 self.variable_name(通过@inject_def声明的变量名)来访问注入的数据
方法:
- before_all: 在所有用例方法之前运行(只运行一次)
- after_all: 在所有用例方法之后运行(只运行一次)
- before_each: 在每个用例方法之前运行(对每个方法的多组数据只执行一次)
- after_each: 在每个用例方法之后运行(对每个方法的多组数据只执行一次)
- before_each_data: 在每组数据被执行前运行
- after_each_data: 在每组数据被执行后运行
- test**: 测试用例方法, 以test开头的方法都会被认为是测试用例方法,可以通过@inject注入数据,将会根据注入数据的数量执行多次
在用例方法中可以使用
unittest的API, 比如self.assertEqual, 详见 Assert methods 和 unittest样例:
@inject_def(['passport', 'password'], session=True) @test_with(myrunner) class TestUserLogin(PyDataTestCase): @classmethod def before_all(cls): print("before all test") @classmethod def after_all(cls): print("after all test") def before_each(self): print("before_each test") def after_each(self): print("after_each test") def before_each_data(self): print("before_each_data test") def after_each_data(self): print("after_each_data test") @inject(data[0]) def test_01(self): self.assertEqual(self.passport, 'username') @inject(data, multi=True) def test_02(self): # 这条用例会被执行多次 print(self.passport) print(self.password) self.assertEqual(self.password, 'password') @inject(["username", "password1"]) def test_03(self): self.assertEqual(self.password, 'password')
@test_with
注册测试用例到runner的注解
Params:
runner: 字符串或runner实例, 如果是字符串则会从全局runner中查找,可以通过传入字符串来避免循环引用
@inject_def and @inject
数据定义和注入注解 Example:
@inject_def(['passport', 'password'], session=True) class TestCaseClass(PyDataTestCase): @inject(["passport1", "password1"]) def test_01(self): print(self.passport) # @inject_def中声明的变量
@inject_def
定义要注入的数据变量 Params:
variables: 注入的数据将会根据变量的声明顺序进行解析session: bool, 如果为True表示该用例将会启用request session, 详见 requests
@inject
注入数据到测试用例方法
Params:
data: list like的数据,将会按照顺序进行解析 (same as@inject_def)multi: 如果为True, 则会将数据解析为多组数据,每组数据将会被执行一次
待改进的地方
- @depends_on: to run multicase pipeline automatically
- @inject_yaml: to inject yaml data
- @inject_csv: to inject csv data
- @once: indicates that the test case should be run once
- @expected: indicates that the test case should return expected output
- @throws: indicates that the test case should throw specific exception
- More corner case
开发
安装依赖
pyenv local 3.9.13
poetry install
运行测试
cd examples
poetry run python main.py
发布
poetry publish --build
Release files for pydatatest 1.0.6
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| pydatatest-1.0.6.tar.gz | 6.8 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| pydatatest-1.0.6-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 16.6 kB
Release files / pydatatest-1.0.6.tar.gz
| Download URL | pydatatest-1.0.6.tar.gz |
|---|---|
| Size | 6.8 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
1da57c1057ee1c959f6617ad2fdca4be3b58f82fbb1b4d1f8f84a50f467bcd47
|
|
BLAKE2b-256 checksum How to use checksums |
865a2be925094390af2b5ab4314a5829eaec327c11dd29715da48e92abd53c70
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
poetry/2.1.2 CPython/3.9.13 Windows/10
|
Release files / pydatatest-1.0.6-py3-none-any.whl
| Download URL | pydatatest-1.0.6-py3-none-any.whl |
|---|---|
| Size | 9.9 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
d29063a868e745f90c57e2caf87a1bbb91b834dd1eed29cbdc1baec62c002297
|
|
BLAKE2b-256 checksum How to use checksums |
971404ce5ecdd028e4d33a2b56d95e2efe003b301e17e98255d8a7c360549cc7
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
poetry/2.1.2 CPython/3.9.13 Windows/10
|