您现在的位置是:亿华云 > 人工智能
如何使用 Teprunner 测试平台编写从登录到下单的大流程接口自动化用例
亿华云2025-10-04 03:56:51【人工智能】8人已围观
简介大家好,我是刚哥。对于登录→搜索商品→添加购物车→下单→支付这样的大流程,使用teprunner测试平台该如何编写接口自动化用例呢?假设这几个节点的接口和参数如下:#登录url:/loginmetho
大家好,何使化用我是测试从登刚哥。
对于登录→搜索商品→添加购物车→下单→支付这样的平台大流程,使用teprunner测试平台该如何编写接口自动化用例呢?编写
假设这几个节点的接口和参数如下:
# 登录 url:/login method: post body: { "username": "dongfanger", "password": "123456"} response: { "token": "de2e3ffu29"} # 搜索商品 url:/searchSku method: get headers: { "token": "de2e3ffu29"} body: { "skuName": "电子书"} response: { "skuId": "222", "price": "2.3"} # 添加购物车 url:/addCart method: post headers: { "token": "de2e3ffu29"} body: { "skuId": "222", "skuNum": "3"} response: { "skuId": "222", "price": "2.3", "skuNum": "3", "totalPrice": "6.9"} # 下单 url:/order method: post headers: { "token": "de2e3ffu29"} body: { "skuId": "222", "price": "2.3", "skuNum": "3", "totalPrice": "6.9"} response: { "orderId": "333"} # 支付 url:/pay method: post headers: { "token": "de2e3ffu29"} body: { "orderId": "333", "payAmount": "6.9"} response: { "success": "true"}我不会直接在teprunner测试平台的界面上直接写新用例的代码,而是录到流程例先在PyCharm中把代码写好调通,再手动复制粘贴或者经过Git同步到平台上。下单本文就来介绍下怎么在PyCharm中借助tep编写这个大流程的接口接口自动化用例。云南idc服务商
先使用命令检查tep已经是自动0.9.1以上版本:
$ tep -V 0.9.1然后初始化项目:
$ tep startproject login-pay-big-process 2021-12-27 12:41:26.721 | INFO | tep.scaffold:create_scaffold:53 - Create new project: login-pay-big-process Project root dir: /Users/dongfanger/PycharmProjects/login-pay-big-process Created folder: login-pay-big-process Created folder: login-pay-big-process/fixtures Created folder: login-pay-big-process/tests Created folder: login-pay-big-process/files Created folder: login-pay-big-process/reports Created file: login-pay-big-process/.gitignore Created file: login-pay-big-process/conf.yaml Created file: login-pay-big-process/conftest.py Created file: login-pay-big-process/pytest.ini Created file: login-pay-big-process/requirements.txt Created file: login-pay-big-process/fixtures/__init__.py Created file: login-pay-big-process/fixtures/fixture_admin.py Created file: login-pay-big-process/fixtures/fixture_env_vars.py Created file: login-pay-big-process/fixtures/fixture_login.py Created file: login-pay-big-process/fixtures/fixture_your_name.py Created file: login-pay-big-process/tests/__init__.py Created file: login-pay-big-process/tests/test_login.py Created file: login-pay-big-process/tests/test_post.py Created file: login-pay-big-process/tests/test_mysql.py Created file: 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", "release"), } # Add your environment and variables }可以只修改domain,数据库可以先不管。何使化用
编辑fixtures/fixture_login.py:
from tep.client import request from tep.fixture import * def _jwt_headers(token): return { "Content-Type": "application/json",测试从登 "authorization": f"Bearer { token}"} @pytest.fixture(scope="session") def login(env_vars): # Code your login logger.info("Administrator login") response = request( "post", url=env_vars.domain + "/login", # 1 headers={ "Content-Type": "application/json"}, json={ "username": "dongfanger", "password": "123456"} # 2 ) assert response.status_code < 400 response_token = jmespath.search("token", response.json()) class Clazz: token = response_token jwt_headers = _jwt_headers(response_token) return Clazz修改url。
修改body。平台
然后可以跑一下tests/test_login.py看能否登录成功。编写
在tests目录下新建test_login_pay.py文件:
from tep.client import request def test(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()) assert response.status_code < 400 token直接从login fixture中取值。 从响应中提取sku_id 和sku_price。添加购物车:
# 添加购物车 sku_num = 3 response = 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()) assert response.status_code < 400 token直接从login fixture中取值。 入参修改为搜索商品提取的源码库变量和自定义的sku_num变量。 提取商品总价total_price。下单:
# 下单 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()) assert response.status_code < 400 token直接从login fixture中取值。 入参全部使用变量替换。 提取订单id。支付:
# 支付 response = request( "post", url=env_vars.domain + "/pay", headers={ "token": login.token}, json={ "orderId": order_id, "payAmount": "6.9"} ) assert response.status_code < 400 assert response.json()["success"] == "true"token直接从login fixture中取值。
入参使用下单提取的order_id变量。
添加一条支付成功的断言。
这样一个大流程用例就写好了。完整代码如下:
import jmespath from tep.client import request def test(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()) assert response.status_code < 400 # 添加购物车 sku_num = 3 response = 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()) assert response.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()) assert response.status_code < 400 # 支付 response = request( "post", url=env_vars.domain + "/pay", headers={ "token": login.token}, json={ "orderId": order_id, "payAmount": "6.9"} ) assert response.status_code < 400 assert response.json()["success"] == "true" 服务器托管很赞哦!(185)
上一篇: 评估域名涉及的行业规模与发展状况成正比。
下一篇: 评估域名涉及的行业规模与发展状况成正比。