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

 更新时间:2024年06月01日 11:20:48   作者:无涯技术博客  
PosMan做服务端的自动化测试中,我们可以把Collection里面的测试用例导入出来,它是JSON的文件,然后我们解析这些JSON文件,让它自动的转成Python测试代码,实现了PostMan里面的接口测试用例自动的转成了Python的测试脚本,而且带了断言

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

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

from flask import  Flask,jsonify
from flask_restful import  Api,Resource

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

class LoginView(Resource):
   def get(self):
      return {'status':0,'msg':'ok','data':'this is a login page'}

   def post(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()
      return jsonify(args)

api.add_resource(LoginView,'/login',endpoint='login')

if __name__ == '__main__':
   app.run(debug=True)

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

服务端测试之PostMan自动生成测试脚本_接口测试

在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

def operationJson():
   '''对login.json文件进行处理'''
   return json.load(open('login.json','r'))['item']

@pytest.mark.parametrize('datas',operationJson())
def test_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

def operationJson():
   '''对login.json文件进行处理'''
   return json.load(open('login.json','r'))['item']

@pytest.mark.parametrize('datas',operationJson())
def test_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']))
   assert r.json()==datas['response']

if __name__ == '__main__':
   pytest.main(["-s","-v","test_login.py"])

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

服务端测试之PostMan自动生成测试脚本_自动化测试_02

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

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

相关文章

  • VScode设置语言为中文以及解决中文注释乱码问题

    VScode设置语言为中文以及解决中文注释乱码问题

    VSCode默认是英文语言环境,习惯了用中文,下面这篇文章主要给大家介绍了关于VScode设置语言为中文以及解决中文注释乱码问题的相关资料,文中通过图文介绍的非常详细,需要的朋友可以参考下
    2023-12-12
  • IDEA配置GIT的详细教程

    IDEA配置GIT的详细教程

    这篇文章主要介绍了IDEA配置GIT的详细教程,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-10-10
  • vscode中模糊搜索和替换案例解析

    vscode中模糊搜索和替换案例解析

    这篇文章主要介绍了vscode中模糊搜索和替换案例解析,本文给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧
    2024-06-06
  • kafka不支持读写分离原理分析

    kafka不支持读写分离原理分析

    这篇文章主要为大家介绍了kafka不支持读写分离原理分析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-11-11
  • 使用git config --global设置用户名和邮件问题

    使用git config --global设置用户名和邮件问题

    这篇文章主要介绍了使用git config --global设置用户名和邮件问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-05-05
  • vscode中setting.json配置文件配置详解

    vscode中setting.json配置文件配置详解

    这篇文章主要给大家介绍了关于vscode中setting.json配置文件配置的相关资料,VSCode中的setting.json文件用于存储用户自定义的配置设置,文中给出了详细的代码示例,需要的朋友可以参考下
    2023-09-09
  • 网站开发中的文件存储目录结构的探讨

    网站开发中的文件存储目录结构的探讨

    网站应用中经常会有文件存储的需求,目录结构该怎么建才好呢?让我们来做下分析
    2010-07-07
  • 编程人员阅读代码的一些小技巧分享

    编程人员阅读代码的一些小技巧分享

    阅读别人的代码作为研发人员是一件经常要做的事情。一个是学习新的编程语言的时候通过阅读别人的代码是个最佳的学习方法,另外是积累编程经验。
    2011-01-01
  • 反向传播BP学习算法Gradient Descent的推导过程

    反向传播BP学习算法Gradient Descent的推导过程

    这篇文章主要为大家介绍了反向传播BP学习算法-Gradient Descent的推导过程,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-05-05
  • yum安装telnet的步骤

    yum安装telnet的步骤

    Telnet协议是TCP/IP协议族中的一员,是Internet远程登录服务的标准协议和主要方式,Telnet是常用的远程控制Web服务器的方法,本文给大家分享yum安装telnet的步骤,感兴趣的朋友一起看看吧
    2020-05-05

最新评论