数据存储文件的编写以及参数化的引用
参数化的步骤
1、编写数据存储⽂件 json
2、编写读取⼯具⽅法 read_json()
3、使⽤参数化组件进⾏引⽤ parametrize
编写参数化⽂件
⼼得:
1、根据模块来新建json⽂件(1个模块1个json⽂件)
2、最外侧使⽤{},模块下⼏个接⼝,编写⼏个key,值为列表
3、列表值中,有⼏组数据,就写⼏个{}.
4、每组数据{}中,组成格式:说明+参数+预期结果
{
"img_code": [
{
"desc": "获取图片验证码成功(随机小数)",
"random": 0.123,
"expect_code": 200
},
{
"desc": "获取图片验证码成功(随机整数)",
"random": 123,
"expect_code": 200
},
{
"desc": "获取图片验证码失败(随机数为空)",
"random": "",
"expect_code": 404
},
{
"desc": "获取图片验证码失败(随机数为字符串)",
"random": "123hello",
"expect_code": 400
}
],
"phone_code": [
{
"desc": "获取短信验证码成功",
"phone": "13600001111",
"imgVerifyCode": 8888,
"expect_text": "发送成功"
},
{
"desc": "获取短信验证码成功",
"phone": "13600001111",
"imgVerifyCode": 8889,
"expect_text": "验证码错误"
}
],
"register": [
{
"desc": "获取短信验证码成功",
"phone": "13600001111",
"imgVerifyCode": 8889,
"expect_text": "验证码错误"
},
{
"desc": "注册失败(图片验证码错误)",
"phone": 13600001112,
"password": "test123",
"verifycode": 8889,
"phone_code": 666666,
"expect_text": "验证码错误"
},
{
"desc": "注册失败(短信验证码错误)",
"phone": 13600001112,
"password": "test123",
"verifycode": 8888,
"phone_code": 666667,
"expect_text": "验证码错误"
},
{
"desc": "注册失败(手机号已存在)",
"phone": 13600001111,
"password": "test123",
"verifycode": 8888,
"phone_code": 666666,
"expect_text": "已存在"
}
],
"login": [
{
"desc": "登录成功",
"keywords": 13600001111,
"password": "test123",
"expect_text": "登录成功"
},
{
"desc": "登录失败(密码为空)",
"keywords": 13600001111,
"password": "",
"expect_text": "不能为空"
},
{
"desc": "登录失败(解锁)",
"keywords": 13600001111,
"password": "error123",
"expect_text": "登录成功"
}
],
"login_status": [
{
"desc": "查询登录状态(已登录)",
"status": "已登录",
"expect_text": "ok"
},{
"desc": "查询登录状态(已登录)",
"status": "未登录",
"expect_text": "未登"
}]
}
编写读取数据⼯具
#读取json文件
import json
import os
from config import DIR_PATH
def read_json(filename,key):
# 拼接读取文件的完整路径 os.sep动态获取/ \
file_path=DIR_PATH+os.sep+"data"+os.sep+filename
arr=[]
with open(file_path,"r",encoding='utf-8') as f:
for data in json.load(f).get(key):
arr.append(tuple(data.values())[1:])
return arr
if __name__ == '__main__':
read_json("register_login.json")
参数化引用
登录接口测试(错误次数锁定)
- 版本01
try:
if "error" in password:
pass
else:
#1.调用登录接口
r=self.reg.api_login(keywords=keywords,password=password)
#2.查看结果
print(r.json())
self.assertIn(expect_text, r.text)
- 版本02
try:
i = 1 # 初始化计数器i为1
r = None # 初始化响应对象r为None
# 如果密码中包含错误信息
if "error" in password:
# 循环尝试登录最多3次
while i <= 3:
r = self.reg.api_login(keywords, password) # 调用API登录方法
i += 1 # 计数器加1
# 断言锁定
print("测试锁定:", r.text) # 打印响应文本
self.assertIn("锁定", r.text) # 使用断言确认响应文本中包含"锁定"信息
# 暂停60秒
sleep(60)
# 测试登录成功
r = self.reg.api_login(keywords="13600001111", password="test123") # 使用正确的密码登录
# 断言登录成功
self.assertIn(expect_text, r.text) # 使用断言确认响应文本中包含期望的信息
这段代码主要是进行登录测试,首先检查密码中
是否包含错误信息
,如果是,则进行最多3次的错误登录尝试
。然后检查是否被锁定
,等待60秒后再次进行登录测试,确保登录成功
。
查询状态接口(查询登录状态,不同结果)
@parameterized.expand(read_json("api_register_login.json", "login_status"))
# 5.查询状态接口测试
def test05_login_status(self, status,expect_text):
try:
if status == "login":
# 1.调用登录接口
self.reg.api_login(keywords="13600001111", password="test123")
# 2.调用查询登录状态接口
r = self.reg.api_login_status()
# 3.看结果
self.assertIn(expect_text, r.text)
except Exception as e:
# 日志
print(e)
# 抛异常
raise