山西建设行政主管部门官方网站,邮箱注册申请官网,本地网站后台管理建设,上海市城乡建设网站pytest.mark.parametrize(参数名1,参数名2...参数n, [(参数名1_data1,参数名2_data1...参数名n_data1),(参数名1_data2,参数名2_data2...参数名n_data2)])
场景#xff1a;
定义一个登录函数test_login,传入参数为name,password#xff0c;需要用多个账号去测试登录功能 # …pytest.mark.parametrize(参数名1,参数名2...参数n, [(参数名1_data1,参数名2_data1...参数名n_data1),(参数名1_data2,参数名2_data2...参数名n_data2)])
场景
定义一个登录函数test_login,传入参数为name,password需要用多个账号去测试登录功能 # test_mod6.py
import pytestpytest.mark.parametrize(name,password,[(Jie,223456),(Jack,111111),(Jame,222222)])
def test_login(name,password):db_data {name:[Jie,Jack,Jame],password:{Jie:123456,Jack:111111,Jame:222222}}if name in db_data[name] and str(password) db_data[password][name]:print(f{name} 成功登录系统)elif name in db_data[name] and str(password) ! db_data[password][name]:print(f{name}账号密码输出错误请重新输出)else:print(f{name} 该账号不存在请输入正确的账号)上述代码执行结果
命令行pytest -vs test_mod6.py
结果为
test_mod6.py::test_login[Jie-223456] Jie账号密码输出错误请重新输出
PASSED
test_mod6.py::test_login[Jack-111111] Jack 成功登录系统
PASSED
test_mod6.py::test_login[Jame-222222] Jame 成功登录系统
PASSED 3 passed in 0.03s 通过pytest.mark.parametrize(参数名,测试数据 )装饰器能够对装饰函数实现参数化测试提高代码复用率通过parametrize中传入参数名和测试数据来实现参数化调用测试用例
parametrize中的参数名对应测试函数中的传入参数名 name password;
parametrize中的测试数据是一个list类型 list中存入多个name,password)元祖形式的测试数据[(Jie,223456),(Jack,111111),(Jame,222222)]
多个parametrize组合使用
pytest.mark.parametrize(password,[223456,111111,34567])
pytest.mark.parametrize(name,[Jie,Jame])
def test_login(name,password):db_data {name:[Jie,Jack,Jame],password:{Jie:123456,Jack:111111,Jame:222222}}if name in db_data[name] and str(password) db_data[password][name]:print(f{name} 成功登录系统)elif name in db_data[name] and str(password) ! db_data[password][name]:print(f{name}账号密码输出错误请重新输出)else:print(f{name} 该账号不存在请输入正确的账号)
命令行pytest -vs test_mod6.py
结果为
test_mod6.py::test_login[Jie-223456] Jie账号密码输出错误请重新输出
PASSED
test_mod6.py::test_login[Jie-111111] Jie账号密码输出错误请重新输出
PASSED
test_mod6.py::test_login[Jie-34567] Jie账号密码输出错误请重新输出
PASSED
test_mod6.py::test_login[Jame-223456] Jame账号密码输出错误请重新输出
PASSED
test_mod6.py::test_login[Jame-111111] Jame账号密码输出错误请重新输出
PASSED
test_mod6.py::test_login[Jame-34567] Jame账号密码输出错误请重新输出
PASSED 6 passed in 0.21s
通过多个parametrize的组合可实现参数化组合后调用测试函数构造不同测试数据的多场景测试
YAML文件
YAML 是专门用来写配置文件的通用数据串行化格式语言非常简洁和强大
基本语法
1、yml文件以缩进代表层级关系
2、缩进空格的个数不重要只要相同层级的元素左对齐即可
3、大小写敏感
4、数据格式为名称:(空格)值
支持的数据结构
对象键值对的集合又称为映射mapping/ 哈希hashes / 字典dictionary数组一组按次序排列的值又称为序列sequence / 列表list纯量scalars单个的、不可再分的值数字、字符串、布尔值# 表示注释从这个字符一直到行尾都会被解析器忽略。 在Pycharm中新建一个YML文件 项目文件夹右键-【new】-【File】-输入 文件名.yml 回车即可生成一个空的yml文件
分别介绍YML文件中的三种数据结构
对象键值对的集合又称为映射mapping/ 哈希hashes / 字典dictionary
name: Jie # 对象的键值对使用冒号结构表示注冒号后需要加空格
age : 21
address: 上海浦东
读取YAML文件
import yamldef read_yaml():with open(D:\\Buyer_test_code\\testteach\\testdatas.yml,encodingutf-8) as f:f yaml.safe_load(f)return fif __name__ __main__:y read_yaml()print(y)运行结果
{name: Jie, age: 21, address: 上海浦东} 2.数组
- Jack # 注-后面需要空格
- Jame
- Flak
通过 safe_load() 读取结果
[Jack, Jame, Flak]
-- Jack- Jame- Flak
-- 1- 2- 3
-- python- java- C
[[Jack, Jame, Flak], [1, 2, 3], [python, java, C]]
复合结构
对象与数组的结合
name:- Jie- Jack- Jame
password:Jie: 223456Jack: 111111Jame: 222222
{name: [Jie, Jack, Jame], password: {Jie: 223456, Jack: 111111, Jame: 222222}}
None 用~表示
name: ~
{name: None}
用!!强制转换类型
name:- Jie- Jack- Jame
password:Jie: !!str 223456 # !!str 强制把int转换为str类型Jack: !!str 111111Jame: 222222
{name: [Jie, Jack, Jame], password: {Jie: 223456, Jack: 111111, Jame: 222222}}
通过YAML文件实现参数化
-- Jie- 223456
-- Jack- 111111
-- Jame- 222222# 在python输出格式[[Jie, 223456], [Jack, 111111], [Jame, 222222]]
import pytest
from test_demo7 import read_yamldatas read_yaml(D:\\Buyer_test_code\\testteach\\testdatas.yml)
pytest.mark.parametrize(name,password,datas)
def test_login(name,password):db_data {name:[Jie,Jack,Jame],password:{Jie:123456,Jack:111111,Jame:222222}}if name in db_data[name] and str(password) db_data[password][name]:print(f{name} 成功登录系统)elif name in db_data[name] and str(password) ! db_data[password][name]:print(f{name}账号密码输出错误请重新输出)else:print(f{name} 该账号不存在请输入正确的账号)
执行结果
test_mod6.py::test_login[Jie-223456] Jie账号密码输出错误请重新输出
PASSED
test_mod6.py::test_login[Jack-111111] Jack 成功登录系统
PASSED
test_mod6.py::test_login[Jame-222222] Jame 成功登录系统
PASSED 3 passed in 0.18s
通过YAML文件可以做到测试数据与测试代码的分离进一步提高代码的复用性灵活性