zoukankan      html  css  js  c++  java
  • 基于python+requests的简单接口测试

      在进行接口测试时,我们可以使用已有的工具(如:jmeter)进行,也可以使用python+requests进行。以下为简单的接口测试模板:

    一、提取常用变量,统一配置

      新建一个config.py文件,用来存放统一变量

      如:

     1 # _*_ coding:;utf--8 _*_
     2 import json
     3 
     4 #接口测试中,使用的头文件信息
     5 headers={
     6         "Accept":"application/json",
     7         "Connection":"keep-alive",
     8         "Accept-Language":"zh-Hans-CN;q=1",
     9         "Accept-Encoding":"gzip, deflate"
    10     }
    11 
    12 #测试地址:IP+端口
    13 service="http://192.168.1.1:8080"
    14 
    15 #读取测试用例文件
    16 interfile=open("D:\testcase接口测试脚本-总接口.csv","r")
    17 intercase=interfile.readlines()
    18 interfile.close()
    19 
    20 #读取测试结果文件,并保存结果
    21 def resultmode(interresult):
    22         testresult=open("D:\testresult\testresult.csv","a")
    23         # interresult="测试结果"
    24         testresult.write(interresult)
    25         testresult.close()

    二、提取requests的方法,方便调用

      如:

     1 #_*_ coding:utf-8 _*_
     2 import json
     3 from Interface_test.config import service,headers,resultmode,intercase
     4 import requests
     5 import re,time
     6 import types
     7 
     8 
     9 def Interface_post(interface,paramter):
    10     url = service + interface
    11     # paramter = json.dumps(paramter)
    12     try:
    13         resp = requests.post(url, headers=headers, data=paramter,timeout=30)
    14         resp.json()
    15         return resp
    16     except ValueError:
    17         print("响应值不是json格式")
    18         return resp
    19     except ConnectionError:
    20         print("网络异常")
    21         return resp
    22     except TimeoutError:
    23         print("请求超时")
    24         return resp
    25 def Interface_get(interface,paramter):
    26     url = service + interface
    27     paramter = json.dumps(paramter)
    28 
    29     resp = requests.get(url, headers=headers,timeout=1)
    30     # print(resp.json())
    31     return resp

    三、针对接口的测试

      如:

     1 # _*_ coding:utf-8 _*_
     2 
     3 import json
     4 from Interface_test.config import service,headers,intercase,resultmode
     5 from Interface_test.mode import Interface_post
     6 import re,time
     7 import requests
     8 
     9 class interface_test():
    10     def __init__(self):
    11         """init"""
    12 
    13 if __name__=='__main__':
    14 
    15     #输出接口测试执行的时间到结果文件
    16     rtime=time.strftime("%Y-%m-%d %H-%M-%S", time.localtime())
    17     resultmode("
    "+"本次测试时间为:"+rtime+"
    ")
    18 
    19     #循环读取测试用例文件中的信息
    20     for i in range(len(intercase)):
    21         param=intercase[i].split(",")
    22 
    23         ###赋值接口请求路径
    24         inter = param[2]
    25 
    26         ####赋值接口参数
    27         para = (str(param[3])).strip()
    28 
    29         ###发起请求
    30         responses=Interface_post(inter,para)
    31         # print(responses.encoding)
    32         # print(responses.text)
    33 
    34         # print(responses.cookies)
    35 
    36         ###查看请求结果
    37         #请求响应code
    38         code=responses.status_code
    39         # print(responses.status_code==requests.codes.ok)
    40         # print(responses.raise_for_status())
    41 
    42         #判断请求结果
    43         if code==200:
    44             ##当请求成功时,获取响应数据
    45             results = json.loads((responses.content).decode())
    46             ##在响应数据中提取result的值
    47             bool = results.get("result")
    48             # body=results.get("body")
    49             ##判断result值:为1时成功,输出信息
    50             if bool=='1':
    51                 ###将响应结果输出到文件
    52                 resultstring=param[0]+","+param[1]+","+str(code)+","+"请求成功,响应成功"+"
    "
    53                 resultmode(resultstring)
    54                 ##判断result结果:为0时,表示请求发送成功,但是响应的数据有问题,返回响应的error信息
    55             elif bool=='0':
    56                 errorstring=results["body"]["errorDescription"]
    57                 resultstring=param[0]+","+param[1]+","+str(code)+","+"请求成功,响应报错"+
    58                              ","+errorstring+"
    "
    59                 resultmode(resultstring)
    60             else:
    61                 resultstring = param[0] + "," +param[1]+","+ str(code)+ ","+"请求响应失败"+"
    "
    62                 resultmode(resultstring)
    63         #当响应code不为200时,输出响应code
    64         else:
    65             resultstring = param[0]  + "," +param[1]+","+ str(code) + ","+"请求响应失败"+"
    "
    66             resultmode(resultstring)

    四、涉及的知识点说明

    1requests

      地址:http://docs.python-requests.org/zh_CN/latest/user/quickstart.html

    2、文件操作

      地址:https://www.cnblogs.com/smallstone2018/p/9841957.html

    3Json

      使用json前,需要先导入包:import json

      jsonpython的字典之间的转换

      json模块有两个方法:

      loads():将json数据转换成disc数据;

      dumps():将dict数据转换成json数据;

      load():读取json文件数据,转换成dict数据;

      dump():将dict数据转换成json数据后 写入json文件;

  • 相关阅读:
    [搬运] Tina R329 swupdate OTA 步骤
    摄像头 ISP 调试的经验之谈(以全志 AW hawkview 为例)
    2021 年了 在 WSL2 中使用 adb 、fastboot 的等命令
    wsl2 编译 linux openwrt 项目的时候,经常会出现 bash: -c: line 0: syntax error near unexpected token `('
    sipeed v833 硬件验证以及开发记录(2021年5月18日)
    Allwinner & Arm 中国 & Sipeed 开源硬件 R329 SDK 上手编译与烧录!
    把 R329 改到 ext4 sdcard 启动变成 Read-Only 系统,导致没有文件修改权限后如何修复。
    linux kernel version magic 不一致导致的模块 加载 (insmod) 不上
    剑指 Offer 17. 打印从1到最大的n位数
    剑指 Offer 16. 数值的整数次方
  • 原文地址:https://www.cnblogs.com/smallstone2018/p/9847758.html
Copyright © 2011-2022 走看看