项目实战(六)
1、模块之间不能互相导入
2、common中是通用模块,不应该与项目相关信息发生关系
3、调试手段:
1)当用例失败需要调试的是,将失败的用例过滤出来,做法如下:
从excel文件中获取的测试用例数据data是list,可使用切片过滤出失败用例进行调试。
2)在断言失败except中print打印info_data中的信息,因为用例失败的都会try...except捕捉到。
4、审核项目的多个前置条件
审核项目前置条件分析:
1)管理员登陆身份
2)有处在审核状态下的借款项目
a、每次执行用例都新增一条借款项目
b、需要借款人的登陆身份,新增一个借款项目
以上,新增借款项目夹具,需要调用借款人身份登陆的夹具,新增借款项目依赖借款人的登录
夹具更新优化:
def login(phone, pwd):
"""登录成功,获得返回数据
可获得用户id,leave_amount,token,token_type
"""
# 准备请求数据
url = Handler.yaml_data['host'] + "/member/login"
json = {"mobile_phone": phone, "pwd": pwd}
headers = {"X-Lemonban-Media-Type": "lemonban.v2"}
# 发送登录请求
resp = requests.post(url=url, json=json, headers=headers)
# 获得返回数据
resp_data = resp.json()
# 处理需要返回的数据
member_id = jsonpath(resp_data, "$..id")[0]
leave_amount = jsonpath(resp_data, "$..leave_amount")[0]
token_type = jsonpath(resp_data, "$..token_type")[0]
token = jsonpath(resp_data, "$..token")[0]
token = " ".join([token_type, token])
# return id token leave_amount
return {
"id": member_id,
"token": token,
"leave_amount": leave_amount
}
@pytest.fixture()
def invest_login():
"""投资用户登录,获得返回数据
可获得用户id,leave_amount,token,token_type
"""
# 获取用户的手机号码和密码
phone = Handler.yaml_security_data['invest_user']['mobile_phone']
pwd = Handler.yaml_security_data['invest_user']['pwd']
return login(phone, pwd)
@pytest.fixture()
def admin_login():
"""管理员身份登录,获得返回值"""
# 获取管理员的手机号码和密码
phone = Handler.yaml_security_data['admin_user']['mobile_phone']
pwd = Handler.yaml_security_data['admin_user']['pwd']
return login(phone, pwd)
@pytest.fixture()
def loan_login():
"""借款人身份登录,获得返回值"""
# 获取借款人的手机号码和密码
phone = Handler.yaml_security_data['loan_user']['mobile_phone']
pwd = Handler.yaml_security_data['loan_user']['pwd']
return login(phone, pwd)
@pytest.fixture()
def add_loan(loan_login):
"""创建借款项目"""
method = "post"
url = Handler.yaml_data['host'] + "/loan/add"
member_id = loan_login['id']
token = loan_login['token']
request_data = {
"member_id": member_id,
"title": "python自动化测试",
"amount": 1000,
"loan_term": 6,
"loan_rate": 16,
"loan_date_type": 1,
"bidding_days": 1
}
headers = {
"X-Lemonban-Media-Type": "lemonban.v2",
"Authorization": token
}
# 发送请求
resp = requests.request(method=method, url=url, json=request_data, headers=headers)
# 获得返回数据
resp_data = resp.json()
load_id = jsonpath(resp_data, "$..id")[0]
return {"id": load_id,"member_id": member_id, "loan_token": token}
5、多值校验
1、挑选重点内容校验,将需要校验的字段以字典的形式保持在expected_result列,有多少个数据需要校验就需要循环多少次,所以for循环的是expected_result
校验:使用for循环,for key,value in dict.items():
try:
assert jsonpath(resp_data,"$..{}".format(key))[0] == value # 判断实际结果是否等于预期结果
except AssertionError as e:
logger.error("测试用例失败{}".format(e))
断言捕获:
err = ''
try:
assert ...
except AssertionError as err:
(logger...)
finally:
if err:
raise e
2、如需分值校验:可if语句为每个值设置flag,判断flag来断言,记录日志
拓展内容:加密,logger rotate,mock
正则表达式:https://www.cnblogs.com/heniu/p/12848642.html
本文来自博客园,作者:%女王%,转载请注明原文链接:https://www.cnblogs.com/lynne-wu/p/14374037.html