python+requests+unittest API接口测试实例(详解)

我在网上查找了下接口测试相关的资料,大都重点是以数据驱动的形式,将用例维护在文本或表格中,而没有说明怎么样去生成想要的用例,

问题:

测试接口时,比如参数a,b,c,我要先测a参数,有(不传,为空,整形,浮点,字符串,object,过短,超长,sql注入)这些情况,其中一种情况就是一条用例,同时要保证b,c的正确,确保a的测试不受b,c参数的错误影响

解决思路:

符合接口规范的参数可以手动去填写,或者准备在代码库中。那些不符合规范的参数(不传,为空,整形,浮点,字符串,object,过短,超长,sql注入)也可以准备在库中作为常量反复使用

主要实现的功能点:

1.api参数整理到dict中,方便组合参数生成用例

2.对生成的用例进行循环执行

3.封装些许代码便于使用和维护

源码分析:

canshuxinxi.py文件用来存放api接口信息。以dict形式存放,这样就可以API_ALL['登录接口'][url]这种方式去取,看起来较直观,知道取得是哪个接口的那部分信息。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

#!/usr/bin/env python

# -*- coding: utf-8 -*-

# @Time  : 2017-06-09 14:09

# canshuxinxi.py

# 接口信息

API_ALL = {

      '登录接口': {

              'number': '1',

              'url': 'http://www.baidu.com',

              'leixing': 'post',

              'head': {

                    'aa': 'bb',

                    'cc': 'dd',

                    },

              'canshu': {

                    'username': 'Wbfxs001',

                    'password': '111111Qq',

                    'grant_type': 'password',

                  },

              'qiwang': {

                    'code': 200,

                    'name': 'Wbfxs001',

                    },

            },

      '退出接口': {

              'number': '1',

              'url': 'http://www.baidu.com',

              'leixing': 'get',

              'canshu': {

                    'username': 'Wbfxs001',

                    'password': '111111Qq',

                    'grant_type': 'password',

                   }

      }

}

changliang.py文件用来存非常规(可能会让接口响应异常)参数,同理也是存放在dict中,方便维护,比如以后要加新的sql注入代码段,可以直接在后面添加

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

#!/usr/bin/env python

# -*- coding: utf-8 -*-

# @Time  : 2017-06-09 14:09

# changliang.py

# 常用参数不传,为空,整形,浮点,字符串,object,过短,超长,sql注入

objects1 = 'xxxx'

objects2 = 'ssss'

ZHCS = {

      '为空': [''],

      '整形': [10, 23, 44, 88, 99],

      '浮点': [1.11, 2.342, -1.03],

      '字符串': ['aaaa', 'bbbb', 'cccc','dddd'],

      'object': [objects1, objects2],

      '过短': ['1', '0'],

      '超长': ['11111111111111111111111111111111111111111111111'],

      'sql注入': [';and 1=1 ;and 1=2', ";and (select count(*) from sysobjects)>0 mssql", ";and 1=(select IS_SRVROLEMEMBER('sysadmin'));--"],

     }

# gongju.py作为工具类,下面方法进行了封装,方便调用。实现了对参数进行组合,生产不同组合的dict类型的参数,并将dict参数保存到list中,方便取用。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

#!/usr/bin/env python

# -*- coding: utf-8 -*-

# @Time  : 2017-06-09 14:11

# gongju.py

# 生成不同组合的参数

class gj():

  def listalls(self, csTrue, csFalse):

    fzgcs = [] # 得到cycanshu的key,将所有非正规参数放在一个list中

    listall = [] # 保存参数dict 为 list

    zhcs = dict(csTrue)

    listall.append(csTrue)

    aaa = list(csFalse.keys())

    for i in aaa:

      bbb = csFalse[i] # 得到具体参数list

      for k in bbb:

        fzgcs.append(k) # 便利每一个参数加入fzgcs列表

    zhcskey = list(zhcs.keys()) # 拿到将要进行组合的参数

    for i in zhcskey:

      a = zhcs[i] # 保留原有的参数值,下面替换完后复原正确参数

      for k in fzgcs:

        zhcs[i] = k

        listall.append(str(zhcs))

      # 循环完后复原正确参数

      zhcs[i] = a

    return listall

jiaoben.py文件作为脚本类,用来对组合好的参数进行循环执行,依次带入组合参数请求。(只做了请求和打印响应信息,可再加入对响应结果断言)

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

#!/usr/bin/env python

# -*- coding: utf-8 -*-

# @Time  : 2017-06-09 14:22

# jiaoben.py

from changliang import ZHCS

from canshuxinxi import API_ALL

from gongju import gj

import requests

# 脚本类,组合工具参数进行请求

gj = gj()

def jball():

  apikeys = API_ALL.keys()

  print(apikeys)

  for key in apikeys:

    apiname = key

    url = API_ALL[key]['url']

    number = API_ALL[key]['number']

    leixin = API_ALL[key]['leixing']

    canshus = gj.listalls(API_ALL[key]['canshu'], ZHCS)

    if leixin == 'post':

      print("======="+" api名称:"+apiname+"=======")

      for cs in canshus:

        mp = requests.post(url=url, data=cs)

        fhcode = str(mp.status_code)

        xysj = str(mp.elapsed.microseconds)

        print("=响应=api编号:"+number+" 响应code:"+fhcode+" 响应时间:"+xysj)

    if leixin == 'get':

      print("======="+" api名称:"+apiname+"=======")

      for cs in canshus:

        mp = requests.get(url=url, data=cs)

        fhcode = str(mp.status_code)

        xysj = str(mp.elapsed.microseconds)

        print("=响应=api编号:"+number+" 响应code:"+fhcode+" 响应时间:"+xysj)

jball()

tesone.py文件作为用例执行文件,熟悉unittest框架的都清楚其中的原理,就不做多介绍,黑熊主要用来控制脚本的执行,结合了unittest框架后,方便后续的扩展。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

#!/usr/bin/env python

# -*- coding: utf-8 -*-

# @Time  : 2017-06-09 8:53

# tesone.py

import requests

import unittest

import time

from jiaoben import jball

class testclassone(unittest.TestCase):

  def setUp(self):

    print(111)

    pass

  def test_1(self):

    jball()  # 执行脚本

    pass

  def tearDown(self):

    print(333)

    pass

if __name__ == '__main__':

  unittest.main()

最后附上用例执行后的效果图:

​现在我也找了很多测试的朋友,做了一个分享技术的交流群,共享了很多我们收集的技术文档和视频教程。
如果你不想再体验自学时找不到资源,没人解答问题,坚持几天便放弃的感受
可以加入我们一起交流。而且还有很多在自动化,性能,安全,测试开发等等方面有一定建树的技术大牛
分享他们的经验,还会分享很多直播讲座和技术沙龙
可以免费学习!划重点!开源的!!!
qq群号:485187702【暗号:csdn11】

最后感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走! 希望能帮助到你!【100%无套路免费领取】

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/241212.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

rk3568 RGMII KSZ8795 MAC TO MAC

RK3568与KSZ8795交换机芯片连接,直接MAC TO MAC方式,这样一下就扩展会4路网口,应该场合比较多,移植过程如下: 参考《Rockchip_Developer_Guide_Linux_MAC_TO_MAC_CN.pdf》 《rockchip RGMIImv88e6390 管理型交换机功…

【设计模式--行为型--命令模式】

设计模式--行为型--命令模式 命令模式定义结构案例优缺点使用场景 命令模式 定义 将一个请求封装为一个对象,使发出请求的责任和执行请求的责任分割开。这样两者之间通过命令对象进行沟通,这样方便将命令对象进行存储,传递,调用…

基于ssm的前后端分离鲜花销售系统论文

摘 要 现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本鲜花销售系统就是在这样的大环境下诞生,其可以帮助管理者在短时间内处理完毕庞大的数据信息&am…

几本学习中整理和面试的PDF,以及精选面试资料

今天和大家分享我在学习过程中整理的笔记,以及我在准备面试中,阅读的PDF,包括Spring Cloud学习手册、Docker学习手册、RabbitMQ学习手册、Spring 6手册、Maven手册、22w字面试手册等等,包括了大部分后端技术以及大部分高频面试题&…

大数据湖体系规划与建设方案:PPT全文51页,附下载

关键词:大数据解决方案,数据湖解决方案,数据数仓建设方案,大数据湖建设规划,大数据湖发展趋势 一、大数据湖体系规划与建设背景 在传统的企业信息化建设中,各个业务系统通常是独立建设的,导致…

【数据结构—栈的实现(数组栈)】

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一、栈 1.1栈的概念及结构 二、栈的实现 2.1头文件的实现—Stack.h 2.2源文件的实现—Stack.c 2.3源文件的测试—test.c 三、栈的实际测试数据展示 3.1正常的出…

麦克风相关知识——图后续处理

这篇文章重点介绍几种实用的波束形成算法(delaysum,delaysub,一阶差分自适应BF)原理及实现效果,再简单介绍一些知名品牌助听器中的BF方案; 1.易实现的BF算法介绍 1.1 delaysum 延时相加和延时相减是最基…

边缘计算系统设计与实践:引领科技创新的新浪潮

文章目录 一、边缘计算的概念二、边缘计算的设计原则三、边缘计算的关键技术四、边缘计算的实践应用《边缘计算系统设计与实践》特色内容简介作者简介目录前言/序言本书读者对象获取方式 随着物联网、大数据和人工智能等技术的快速发展,传统的中心化计算模式已经无法…

MySQL命令行备份数据库的关键步骤

MySQL是一个广泛使用的开源关系数据库管理系统,它常用于各种规模的应用,从个人博客到大型企业级系统。在使用MySQL的过程中,数据备份是一项至关重要的任务,它能够确保在发生数据丢失或系统故障时,我们可以恢复和重新部…

JavaScript实现飘窗功能

实现飘窗功能很简单 html代码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title…

基于yolov2深度学习网络的人员跌倒检测识别matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1 YOLOv2深度学习网络 4.2 人员跌倒检测识别原理 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 matlab2022a 3.部分核心程序 clc; clear; close all; warning off; a…

2023最新软件测试面试题(带答案)

1. 请自我介绍一下(需简单清楚的表述自已的基本情况&#xff0c;在这过程中要展现出自信&#xff0c;对工作有激情&#xff0c;上进&#xff0c;好学) 面试官您好&#xff0c;我叫###&#xff0c;今年26岁&#xff0c;来自江西九江&#xff0c;就读专业是电子商务&#xff0c;毕…

【Zerotier】自建PLANET服务器内网地址连接

之前已经完成了【Zerotier】通过docker自建PLANET服务器&#xff0c;但是遇到一个问题&#xff0c;因为各种原因&#xff0c;内网里面的ZeroTier Client无法通过PLANET服务器的公网地址连接&#xff0c;愁怀了这下。在经过多方测试验证后&#xff0c;可以采取重新生成一个PLANE…

应收应付模块如何启用?

应收应付模块启动操作手册 系统平台——系统工具——系统状态控制 查看要修改的日期 财务结账到指定期限后进行联用 点击与总账联用按钮

自激活T细胞为肿瘤免疫治疗提供新思路—高分文献分享

CD28是在所有小鼠和人类T细胞上表达的共刺激受体&#xff0c;用来调节T细胞受体(TCR) 的响应。异常的CD28 信号传导是癌症、自身免疫和病毒感染中T细胞功能障碍的决定性特征之一。早期的一些研究表明CD28对CD4 T细胞更重要&#xff0c;但也有越来越多的研究者发现其对CD8 T细胞…

(反序列化)小记录

目录 [CISCN 2023 华北]ez_date 绕过MD5和sha1强相关绕过 date()绕过 payload [FSCTF 2023]ez_php [CISCN 2023 华北]ez_date <?php error_reporting(0); highlight_file(__FILE__); class date{public $a;public $b;public $file;public function __wakeup(){if(is_a…

【Pyqt5】QWidget: Must construct a QApplication before a QWidget

问题说明&#xff1a; pyqt6切换为pyqt5时&#xff0c;引用自定义类时报错&#xff0c;QWidget: Must construct a QApplication before a QWidget 解决办法 修改导入python包的导入顺序后可以正常运行 使用pyqt5时需将pyqtgraph放到pyqt5之后导入

HT4125 低压CMOS 缓冲门器件 单电源电压转换

​​亿胜盈科HT4125 是一款低压CMOS 缓冲门器件&#xff0c;可运行在针对便携式和电池设备的更宽电压范围内。 其采用了较低阀值电路来设计此输入&#xff0c;以便匹配Vcc 3.3V 时的1.8V 输入逻辑&#xff0c;并且可被用 在1.8V 至3.3V 电平上行转换器功能中。此外&#xff0c;…

如何在 Windows 7/8/10/11 中恢复已删除的文件 [7 种方式]

当文件堆积时&#xff0c;您可以删除其中一些文件以获得更多存储空间或组织良好的环境。然而&#xff0c;最糟糕的是 如果您不小心删除了运行 Windows 11、10、8、7 或 XP 的 PC 上的重要文件&#xff0c;就会发生。在这种情况下&#xff0c;您 应该看到 如何在Windows上恢复已…

【云原生kubernets】Deployment的功能与应用

一、导读 所有的 Deployment 对象都是由 Kubernetes 集群中的 DeploymentController 进行管理&#xff0c;DeploymentController 会在启动时通过 Informer 监听三种不同资源的通知&#xff0c;Pod、ReplicaSet 和 Deployment&#xff0c;这三种资源的变动都会触发 DeploymentCo…