PostMan接口测试用例自动转成Python的测试脚本

2025-12-13 0 305

在使用PosMan做服务端的自动化测试中,我们可以把测试用例加到一个Collection中,但是随着测试用例越来越多,以及工作的需求,我们需要把PostMan中的测试用例需要迁移到脚本的方式实现,平常的迁移思路是我们在脚本里面把之前的接口测试用例重新实现,这样相对而言它的成本是比较高的,特别是涉及的自动化测试用例特别多的时候。我们可以把Collection里面的测试用例导入出来,它是JSON的文件,然后我们解析这些JSON文件,让它自动的转成Python测试代码,从而轻松的完成这样的一个过程。被测试的API代码如下:

#!/usr/bin/env python
#!coding:utf-8

fromflaskimport Flask,jsonify
fromflask_restfulimport Api,Resource

app=Flask(__name__)
api=Api(app)

classLoginView(Resource):
defget(self):
return{\’status\’:0,\’msg\’:\’ok\’,\’data\’:\’this is a login page\’}

defpost(self):
parser=reqparse.RequestParser()
parser.add_argument(\’username\’,type=str, required=True,help=\’用户名不能为空\’)
parser.add_argument(\’password\’,type=str,required=True,help=\’账户密码不能为空\’)
parser.add_argument(\’age\’,type=int,help=\’年龄必须为正正数\’)
parser.add_argument(\’sex\’,type=str,help=\’性别只能是男或者女\’,choices=[\’女\’,\’男\’])
args=parser.parse_args()
returnjsonify(args)

api.add_resource(LoginView,\’/login\’,endpoint=\’login\’)

if__name__==\’__main__\’:
app.run(debug=True)

在PostMan里面创建Collection名称login,里面的接口测试用例具体如下:

PostMan接口测试用例自动转成Python的测试脚本

在PostMan里面导出该Collection,命名为login.json,login.json文件的内容为:

{
\”info\”: {
\”_postman_id\”:\”982a3108-6710-4a71-aaf8-e62a00d1813c\”,
\”name\”:\”login\”,
\”schema\”:\”https://schema.getpostman.com/json/collection/v2.1.0/collection.json\”
},
\”item\”: [
{
\”name\”:\”校验用户名不能为空\”,
\”request\”: {
\”method\”:\”POST\”,
\”header\”: [
{
\”key\”:\”Content-Type\”,
\”name\”:\”Content-Type\”,
\”value\”:\”application/json\”,
\”type\”:\”text\”
}
],
\”body\”: {
\”mode\”:\”raw\”,
\”raw\”:\”{\\n\\t\\\”password\\\”:\\\”admin\\\”,\\n\\t\\\”sex\\\”:\\\”男\\\”,\\n\\t\\\”age\\\”:18\\n}\”,
\”options\”: {
\”raw\”: {
\”language\”:\”json\”
}
}
},
\”url\”: {
\”raw\”:\”http://localhost:5000/login\”,
\”protocol\”:\”http\”,
\”host\”: [
\”localhost\”
],
\”port\”:\”5000\”,
\”path\”: [
\”login\”
]
}
},
\”response\”: []
},
{
\”name\”:\”校验密码不能为空\”,
\”request\”: {
\”method\”:\”POST\”,
\”header\”: [
{
\”key\”:\”Content-Type\”,
\”name\”:\”Content-Type\”,
\”value\”:\”application/json\”,
\”type\”:\”text\”
}
],
\”body\”: {
\”mode\”:\”raw\”,
\”raw\”:\”{\\n\\t\\\”username\\\”:\\\”wuya\\\”,\\n\\t\\\”sex\\\”:\\\”男\\\”,\\n\\t\\\”age\\\”:18\\n}\”,
\”options\”: {
\”raw\”: {
\”language\”:\”json\”
}
}
},
\”url\”: {
\”raw\”:\”http://localhost:5000/login\”,
\”protocol\”:\”http\”,
\”host\”: [
\”localhost\”
],
\”port\”:\”5000\”,
\”path\”: [
\”login\”
]
}
},
\”response\”: []
},
{
\”name\”:\”校验性别参数不是男或者女\”,
\”request\”: {
\”method\”:\”POST\”,
\”header\”: [
{
\”key\”:\”Content-Type\”,
\”name\”:\”Content-Type\”,
\”value\”:\”application/json\”,
\”type\”:\”text\”
}
],
\”body\”: {
\”mode\”:\”raw\”,
\”raw\”:\”{\\n\\t\\\”username\\\”:\\\”wuya\\\”,\\n\\t\\\”password\\\”:\\\”admin\\\”,\\n\\t\\\”sex\\\”:\\\”asdf\\\”,\\n\\t\\\”age\\\”:18\\n}\”,
\”options\”: {
\”raw\”: {
\”language\”:\”json\”
}
}
},
\”url\”: {
\”raw\”:\”http://localhost:5000/login\”,
\”protocol\”:\”http\”,
\”host\”: [
\”localhost\”
],
\”port\”:\”5000\”,
\”path\”: [
\”login\”
]
}
},
\”response\”: []
},
{
\”name\”:\”校验年龄不是正整数\”,
\”request\”: {
\”method\”:\”POST\”,
\”header\”: [
{
\”key\”:\”Content-Type\”,
\”name\”:\”Content-Type\”,
\”value\”:\”application/json\”,
\”type\”:\”text\”
}
],
\”body\”: {
\”mode\”:\”raw\”,
\”raw\”:\”{\\n\\t\\\”username\\\”:\\\”wuya\\\”,\\n\\t\\\”password\\\”:\\\”admin\\\”,\\n\\t\\\”sex\\\”:\\\”男\\\”,\\n\\t\\\”age\\\”:\\\”rrest\\\”\\n}\”,
\”options\”: {
\”raw\”: {
\”language\”:\”json\”
}
}
},
\”url\”: {
\”raw\”:\”http://localhost:5000/login\”,
\”protocol\”:\”http\”,
\”host\”: [
\”localhost\”
],
\”port\”:\”5000\”,
\”path\”: [
\”login\”
]
}
},
\”response\”: []
},
{
\”name\”:\”校验登录成功\”,
\”request\”: {
\”method\”:\”POST\”,
\”header\”: [
{
\”key\”:\”Content-Type\”,
\”name\”:\”Content-Type\”,
\”value\”:\”application/json\”,
\”type\”:\”text\”
}
],
\”body\”: {
\”mode\”:\”raw\”,
\”raw\”:\”{\\n\\t\\\”username\\\”:\\\”wuya\\\”,\\n\\t\\\”password\\\”:\\\”admin\\\”,\\n\\t\\\”sex\\\”:\\\”男\\\”,\\n\\t\\\”age\\\”:\\\”18\\\”\\n}\”,
\”options\”: {
\”raw\”: {
\”language\”:\”json\”
}
}
},
\”url\”: {
\”raw\”:\”http://localhost:5000/login\”,
\”protocol\”:\”http\”,
\”host\”: [
\”localhost\”
],
\”port\”:\”5000\”,
\”path\”: [
\”login\”
]
}
},
\”response\”: []
}
],
\”protocolProfileBehavior\”: {}
}

本质上而言,它就是一个JSON文件,使用Python文件对它进行反序列化处理成字典数据类型,然后操作字典,这个过程相对来说不难,具体实现的代码如下:

#!/usr/bin/env python
#!coding:utf-8

import requests
import json
import pytest

defoperationJson():
\’\’\’对login.json文件进行处理\’\’\’
returnjson.load(open(\’login.json\’,\’r\’))[\’item\’]

@pytest.mark.parametrize(\’datas\’,operationJson())
deftest_api_login(datas):
\’\’\’登录API的校验测试\’\’\’
r=requests.request(
method=datas[\’request\’][\’method\’],
url=datas[\’request\’][\’url\’][\’raw\’],
json=json.loads(datas[\’request\’][\’body\’][\’raw\’]))
print(json.dumps(r.json(),ensure_ascii=False))

if__name__==\’__main__\’:
pytest.main([\”-s\”,\”-v\”,\”test_login.py\”])

使用Pytest框架的参数化几行代码就可以搞定了,当然断言需要单独的加。这个过程的思路其实非常简单,就是对JSON的文件处理成字典,然后利用Pytest框架的参数化来循环处理。当然可以把JSON文件简单的添加下断言,就更加智能化,添加的内容添加到response的里面内容,对login.json都在里面添加下验证点,完善后的文件内容为:

{
\”info\”: {
\”_postman_id\”:\”982a3108-6710-4a71-aaf8-e62a00d1813c\”,
\”name\”:\”login\”,
\”schema\”:\”https://schema.getpostman.com/json/collection/v2.1.0/collection.json\”
},
\”item\”: [
{
\”name\”:\”校验用户名不能为空\”,
\”request\”: {
\”method\”:\”POST\”,
\”header\”: [
{
\”key\”:\”Content-Type\”,
\”name\”:\”Content-Type\”,
\”value\”:\”application/json\”,
\”type\”:\”text\”
}
],
\”body\”: {
\”mode\”:\”raw\”,
\”raw\”:\”{\\n\\t\\\”password\\\”:\\\”admin\\\”,\\n\\t\\\”sex\\\”:\\\”男\\\”,\\n\\t\\\”age\\\”:18\\n}\”,
\”options\”: {
\”raw\”: {
\”language\”:\”json\”
}
}
},
\”url\”: {
\”raw\”:\”http://localhost:5000/login\”,
\”protocol\”:\”http\”,
\”host\”: [
\”localhost\”
],
\”port\”:\”5000\”,
\”path\”: [
\”login\”
]
}
},
\”response\”:
{
\”message\”: {
\”username\”:\”用户名不能为空\”
}
}
},
{
\”name\”:\”校验密码不能为空\”,
\”request\”: {
\”method\”:\”POST\”,
\”header\”: [
{
\”key\”:\”Content-Type\”,
\”name\”:\”Content-Type\”,
\”value\”:\”application/json\”,
\”type\”:\”text\”
}
],
\”body\”: {
\”mode\”:\”raw\”,
\”raw\”:\”{\\n\\t\\\”username\\\”:\\\”wuya\\\”,\\n\\t\\\”sex\\\”:\\\”男\\\”,\\n\\t\\\”age\\\”:18\\n}\”,
\”options\”: {
\”raw\”: {
\”language\”:\”json\”
}
}
},
\”url\”: {
\”raw\”:\”http://localhost:5000/login\”,
\”protocol\”:\”http\”,
\”host\”: [
\”localhost\”
],
\”port\”:\”5000\”,
\”path\”: [
\”login\”
]
}
},
\”response\”:
{
\”message\”: {
\”password\”:\”账户密码不能为空\”
}
}
},
{
\”name\”:\”校验性别参数不是男或者女\”,
\”request\”: {
\”method\”:\”POST\”,
\”header\”: [
{
\”key\”:\”Content-Type\”,
\”name\”:\”Content-Type\”,
\”value\”:\”application/json\”,
\”type\”:\”text\”
}
],
\”body\”: {
\”mode\”:\”raw\”,
\”raw\”:\”{\\n\\t\\\”username\\\”:\\\”wuya\\\”,\\n\\t\\\”password\\\”:\\\”admin\\\”,\\n\\t\\\”sex\\\”:\\\”asdf\\\”,\\n\\t\\\”age\\\”:18\\n}\”,
\”options\”: {
\”raw\”: {
\”language\”:\”json\”
}
}
},
\”url\”: {
\”raw\”:\”http://localhost:5000/login\”,
\”protocol\”:\”http\”,
\”host\”: [
\”localhost\”
],
\”port\”:\”5000\”,
\”path\”: [
\”login\”
]
}
},
\”response\”:
{
\”message\”: {
\”sex\”:\”性别只能是男或者女\”
}
}
},
{
\”name\”:\”校验年龄不是正整数\”,
\”request\”: {
\”method\”:\”POST\”,
\”header\”: [
{
\”key\”:\”Content-Type\”,
\”name\”:\”Content-Type\”,
\”value\”:\”application/json\”,
\”type\”:\”text\”
}
],
\”body\”: {
\”mode\”:\”raw\”,
\”raw\”:\”{\\n\\t\\\”username\\\”:\\\”wuya\\\”,\\n\\t\\\”password\\\”:\\\”admin\\\”,\\n\\t\\\”sex\\\”:\\\”男\\\”,\\n\\t\\\”age\\\”:\\\”rrest\\\”\\n}\”,
\”options\”: {
\”raw\”: {
\”language\”:\”json\”
}
}
},
\”url\”: {
\”raw\”:\”http://localhost:5000/login\”,
\”protocol\”:\”http\”,
\”host\”: [
\”localhost\”
],
\”port\”:\”5000\”,
\”path\”: [
\”login\”
]
}
},
\”response\”:
{
\”message\”: {
\”age\”:\”年龄必须为正正数\”
}
}
},
{
\”name\”:\”校验登录成功\”,
\”request\”: {
\”method\”:\”POST\”,
\”header\”: [
{
\”key\”:\”Content-Type\”,
\”name\”:\”Content-Type\”,
\”value\”:\”application/json\”,
\”type\”:\”text\”
}
],
\”body\”: {
\”mode\”:\”raw\”,
\”raw\”:\”{\\n\\t\\\”username\\\”:\\\”wuya\\\”,\\n\\t\\\”password\\\”:\\\”admin\\\”,\\n\\t\\\”sex\\\”:\\\”男\\\”,\\n\\t\\\”age\\\”:\\\”18\\\”\\n}\”,
\”options\”: {
\”raw\”: {
\”language\”:\”json\”
}
}
},
\”url\”: {
\”raw\”:\”http://localhost:5000/login\”,
\”protocol\”:\”http\”,
\”host\”: [
\”localhost\”
],
\”port\”:\”5000\”,
\”path\”: [
\”login\”
]
}
},
\”response\”:
{
\”age\”:18,
\”password\”:\”admin\”,
\”sex\”:\”男\”,
\”username\”:\”wuya\”
}
}
],
\”protocolProfileBehavior\”: {}
}

继续完善测试代码,增加接口的断言,完善后的代码如下:

#!/usr/bin/env python
#!coding:utf-8

import requests
import json
import pytest

defoperationJson():
\’\’\’对login.json文件进行处理\’\’\’
returnjson.load(open(\’login.json\’,\’r\’))[\’item\’]

@pytest.mark.parametrize(\’datas\’,operationJson())
deftest_api_login(datas):
\’\’\’登录API的校验测试\’\’\’
# print(type(datas[\’response\’]))
r=requests.request(
method=datas[\’request\’][\’method\’],
url=datas[\’request\’][\’url\’][\’raw\’],
json=json.loads(datas[\’request\’][\’body\’][\’raw\’]))
assertr.json()==datas[\’response\’]

if__name__==\’__main__\’:
pytest.main([\”-s\”,\”-v\”,\”test_login.py\”])

执行如上的测试代码,见如下图展示的执行结果信息:

PostMan接口测试用例自动转成Python的测试脚本

依据如上,很轻松的实现了PostMan里面的接口测试用例自动的转成了Python的测试脚本,而且带了断言的信息。

到此这篇关于PostMan接口测试用例自动转成Python的测试脚本的文章就介绍到这了,更多相关PostMan自动生成Python测试脚本内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

申明:本文由第三方发布,内容仅代表作者观点,与本网站无关。对本文以及其中全部或者部分内容的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。本网发布或转载文章出于传递更多信息之目的,并不意味着赞同其观点或证实其描述,也不代表本网对其真实性负责。

左子网 编程相关 PostMan接口测试用例自动转成Python的测试脚本 https://www.zuozi.net/36654.html

常见问题
  • 1、自动:拍下后,点击(下载)链接即可下载;2、手动:拍下后,联系卖家发放即可或者联系官方找开发者发货。
查看详情
  • 1、源码默认交易周期:手动发货商品为1-3天,并且用户付款金额将会进入平台担保直到交易完成或者3-7天即可发放,如遇纠纷无限期延长收款金额直至纠纷解决或者退款!;
查看详情
  • 1、描述:源码描述(含标题)与实际源码不一致的(例:货不对板); 2、演示:有演示站时,与实际源码小于95%一致的(但描述中有”不保证完全一样、有变化的可能性”类似显著声明的除外); 3、发货:不发货可无理由退款; 4、安装:免费提供安装服务的源码但卖家不履行的; 5、收费:价格虚标,额外收取其他费用的(但描述中有显著声明或双方交易前有商定的除外); 6、其他:如质量方面的硬性常规问题BUG等。 注:经核实符合上述任一,均支持退款,但卖家予以积极解决问题则除外。
查看详情
  • 1、左子会对双方交易的过程及交易商品的快照进行永久存档,以确保交易的真实、有效、安全! 2、左子无法对如“永久包更新”、“永久技术支持”等类似交易之后的商家承诺做担保,请买家自行鉴别; 3、在源码同时有网站演示与图片演示,且站演与图演不一致时,默认按图演作为纠纷评判依据(特别声明或有商定除外); 4、在没有”无任何正当退款依据”的前提下,商品写有”一旦售出,概不支持退款”等类似的声明,视为无效声明; 5、在未拍下前,双方在QQ上所商定的交易内容,亦可成为纠纷评判依据(商定与描述冲突时,商定为准); 6、因聊天记录可作为纠纷评判依据,故双方联系时,只与对方在左子上所留的QQ、手机号沟通,以防对方不承认自我承诺。 7、虽然交易产生纠纷的几率很小,但一定要保留如聊天记录、手机短信等这样的重要信息,以防产生纠纷时便于左子介入快速处理。
查看详情

相关文章

猜你喜欢
发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务