大家好,我是刚哥。对于登录→搜索商品→添加购物车→下单→支付这样的大流程,如何使用teprunner测试平台编写接口自动化用例?假设这些节点的接口和参数如下:#loginurl:/loginmethod:postbody:{"username":"dongfanger","password":"123456"}response:{"token":"de2e3ffu29"}#Searchproducturl:/searchSkumethod:getheaders:{"token":"de2e3ffu29"}body:{"skuName":"e-book"}response:{"skuId":"222","price":"2.3"}#Addshoppingcarturl:/addCartmethod:postheaders:{"token":"de2e3ffu29"}body:{"skuId":"222","skuNum":"3"}response:{"skuId":"222""price":"2.3","skuNum":"3","totalPrice":"6.9"}#Orderurl:/ordermethod:postheaders:{"token":"de2e3ffu29"}body:{"skuId":"222","价格":"2.3","skuNum":"3","总价"t;:"6.9"}response:{"orderId":"333"}#Paymenturl:/paymethod:postheaders:{"token":"de2e3ffu29"}body:{"orderId":"333","payAmount":"6.9"}response:{"success":"true"}我不会直接在teprunner测试平台的界面上写新用例的代码,而是先在PyCharm中写好代码,然后手动复制粘贴或者通过Git同步到平台本文将介绍如何在PyCharm中使用tep来编写这个大进程的界面自动化用例。先使用命令检查tep已经是0.9.1以上版本:$tep-V0.9.1然后初始化项目:$tepstartprojectlogin-pay-big-process2021-12-2712:41:26.721|INFO|tep.scaffold:create5_scaffold:create5_scaffold:create5_scaffold:Createnewproject:login-pay-big-processProjectrootdir:/Users/dongfanger/PycharmProjects/login-pay-big-processCreated文件夹:login-pay-big-processCreated文件夹:login-pay-big-process/fixturesCreatedfolder:login-pay-big-process/testsCreatedfolder:login-pay-big-process/filesCreatedfolder:login-pay-big-process/reportsCreatedfile:login-pay-big-process/.gitignoreCreatedfile:login-pay-big-process/conf.yamlCreatedfile:login-pay-大进程/conftest.pyCreatedfile:login-pay-big-process/pytest.iniCreatedfile:login-pay-big-process/requirements.txtCreatedfile:login-pay-big-process/fixtures/__init__.pyCreatedfile:login-pay-大进程/fixtures/fixture_admin.pyCreatedfile:login-pay-big-process/fixtures/fixture_env_vars.pyCreatedfile:login-pay-big-process/fixtures/fixture_login.pyCreatedfile:login-pay-big-process/fixtures/fixture_your_name.pyCreatedfile:login-pay-big-process/tests/__init__.pyCreatedfile:login-pay-big-process/tests/test_login.pyCreatedfile:login-pay-big-process/tests/test_post.pyCreatedfile:login-pay-big-process/tests/test_mysql.pyCreatedfile:login-pay-big-process/tests/test_request.py修改fixtures/fixture_env_vars.py环境变量中的域名:mapping={"qa":{"domain":"https://qa.com",#1"mysql_engine":mysql_engine("127.0.0.1",#host"2306",#port"root",#username"123456",#password"qa"),#db_name},"release":{"domain":"https://release.com","mysql_engine":mysql_engine("127.0.0.1","2306","root","123456","re??lease"),}#Addyourenvironmentandvariables}只能修改域,数据库可以不用管编辑fixtures/fixture_login.py:fromtep.clientimportrequestfromtep.fixtureimport*def_jwt_headers(token):return{"Content-Type":"application/json","authorization":f"Bearer{token}"}@pytest.fixture(scope=“session”)deflogin(env_vars):#Codeyourloginlogger.info(“Administratorlogin”)response=request(“post”,url=env_vars.domain+“/login”,#1headers={“Content-Type”:“application/json"},json={"username":"dongfanger","password":"123456"}#2)assertresponse.status_code<400response_token=jmespath.search("token",response.json())classClazz:token=response_tokenjwt_headers=_jwt_headers(response_token)returnClazz修改url。修改身体。然后可以运行tests/test_login.py看看是否可以登录成功。在tests目录下新建test_login_pay.py文件:fromtep.clientimportrequestdeftest(env_vars,login):#搜索产品#加入购物车#下订单#付款首先在流程架子上备注清楚。然后一个接口一个接口添加。搜索产品:#Searchproductresponse=request("get",url=env_vars.domain+"/searchSku",headers={"token":login.token},params={"skuName":"e-book"})sku_id=jmespath.search("skuId",response.json())sku_price=jmespath.search("price",response.json())assertresponse.status_code<400令牌直接从登录夹具中获取值。从响应中提取sku_id和sku_price。添加购物车:#addshoppingcartsku_num=3response=request("post",url=env_vars.domain+"/addCart",headers={"token":login.token},json={"skuId":sku_id,"skuNum":sku_num})total_price=jmespath.search("totalPrice",response.json())assertresponse.status_code<400令牌直接从登录装置中获取值。输入参数更改为从搜索产品和自定义sku_num变量中提取的变量。提取产品total_price的总价。顺序:#orderresponse=request("post",url=env_vars.domain+"/order",headers={"token":login.token},json={"skuId":sku_id,"price":sku_price,"skuNum":sku_num,"totalPrice":total_price})order_id=jmespath.search("orderId",response.json())assertresponse.status_code<400令牌直接从登录夹具中获取值。所有输入参数都被变量替换。提取订单ID。支付:#payresponse=request("post",url=env_vars.domain+"/pay",headers={"token":login.token},json={"orderId":order_id,"payAmount":"6.9"})assertresponse.status_code<400assertresponse.json()["success"]=="true"令牌直接从登录装置获取值。输入参数使用从订单中提取的order_id变量。添加支付成功的断言。写了这么大的流程用例。完整代码如下:importjmespathfromtep.clientimportrequestdeftest(env_vars,login):#搜索商品response=request("get",url=env_vars.domain+"/searchSku",headers={"token":login.token},params={"skuName":"电子书"})sku_id=jmespath.search("skuId",response.json())sku_price=jmespath.search("price",response.json())assertresponse.status_code<400#添加购物车sku_num=3response=request("post",url=env_vars.domain+"/addCart",headers={"token":login.token},json={"skuId":sku_id,"skuNum":sku_num})total_price=jmespath.search("totalPrice",response.json())assertresponse.status_code<400#下单response=request("post",url=env_vars.domain+"/order",headers={"token":login.token},json={"skuId":sku_id,"price":sku_price,"skuNum":sku_num,"totalPrice":total_price})order_id=jmespath.search("orderId",response.json())assertresponse.status_code<400#支付response=request("post",url=env_vars.domain+"/pay",headers={"token":login.token},json={"orderId":order_id,"payAmount":"6.9"})assertresponse.status_code<400assertresponse.json()["success"]=="true"