项目实战(六)

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
posted @ 2021-02-04 17:41  %女王%  阅读(74)  评论(0编辑  收藏  举报