接口自动化测试(三)

一. 定义公共的请求方法

如下图所示,同一个模块,只是请求数据和返回数据不同,http请求的发送过程是完全相同的

对于不同模块,只是请求的url、请求方法、请求数据和返回数据不同,http请求的过程也是完全相同的

这样就可以将发送请求的方法写成一个类或函数,供不同的测试用例调用

具体的实现是

import requests

class MyRequests:

    def send_request(self, method, url, **kwargs):
        res = requests.request(method, url, **kwargs).text
        return res

二. 利用excel存储测试数据,实现测试数据和测试脚本的分离

利用excel存储测试数据的好处是,可以实现测试数据和测试脚本的分离,以后一旦数据有变动(添加删除、修改测试数据),不需要修改代码,只在excel中修改就好了

那么,测试数据和脚本是怎么联系在一起的?

可以定义一个读取excel的类,这个类读取到的数据返回给测试用例,测试用例再调用每一条测试数据去发送请求,进行比对。但有一个问题,按照以往的做法,一个test_send_request函数里利用for循环遍历每条测试数据,得到的结果始终是一个测试用例,我们希望每一条测试数据都是一个测试用例,就需要用到ddt

三. ddt

1. 什么是ddt

ddt(data driven tests):数据驱动测试,由外部数据集合来驱动测试用例

核心的思想:数据和测试代码分离

2. 应用场景

一组数据来执行相同的操作

当测试数据发生大量变化的情况下测试代码(或者说测试用例)可以保持不变

3. ddt的安装

pip install ddt

4. ddt的用法

使用之前先导入ddt:

import ddt

ddt结合单元测试来使用

1). 在测试类定义之前使用:@ddt

2). 在测试用例定义之前使用:@ddt.data(测试数据),测试数据之间用逗号隔开

3). 在2的基础上定义测试用例时,参数接收2中的测试数据

例:

@ddt.ddt

class DemoTest(unittest.TestCase):

  @ddt.data(2,3,4)

  def test_print(self, a):

    print("简单调用@data查看输出的值是什么?", a)

一组数据之间用逗号隔开

data的参数可以为如下几种:

1) 一组数据中,每个数据为单个值

2) 一组数据中,每个数据为一个列表或者一个字典

3) 文件对象:json、yaml

一组数据中的数据为列表或者字典:

@data([a,b],[c,d])

如何从以上数据中获取到列表中每一项值?

@unpack

若变量A=[{a:b, a1:b1},{c:d, c1:d1}]

如何将变量A中的每一组元素作为测试数据?

@data(*A)

数据为文件对象:json、yaml

{"name":"nick","gender":"male","age","29"}

@ddt.file_data(json文件路径)

思考:如何结合excel来使用ddt?

4. 实例

实例1

import ddt
import unittest

@ddt.ddt
class test_ddt(unittest.TestCase):

    @ddt.data(1,2,3,4,5,6,7)
    def test_print(self, a):
        print(a)

运行结果:
Launching unittests with arguments python -m unittest class_ddt.test_ddt in D:\python_workshop\python6\revise\futureloan_API_framework
1
2
3
4
5
6
7

Ran 7 tests in 0.006s

OK

实例2

import ddt
import unittest

@ddt.ddt
class test_ddt(unittest.TestCase):

    @ddt.data([1,2],[10,11])
     def test_print(self, a):
        print(a)

运行结果:
Launching unittests with arguments python -m unittest D:/python_workshop/python6/revise/futureloan_API_framework/class_ddt.py in D:\python_workshop\python6\revise\futureloan_API_framework

Ran 2 tests in 0.001s

OK
[1, 2]
[10, 11]

实例3

import ddt
import unittest

@ddt.ddt
class test_ddt(unittest.TestCase):

    @ddt.data([1,2],[10,11])
    @ddt.unpack
    def test_add_print(self,a,b):
        print(a+b)

运行结果:
Launching unittests with arguments python -m unittest class_ddt.test_ddt in D:\python_workshop\python6\revise\futureloan_API_framework
3
21

Ran 2 tests in 0.002s

OK

实例4

import ddt
import unittest

data = [1,2,3,4,5,6,7,8,9,10]

@ddt.ddt
class test_ddt(unittest.TestCase):

    #从一个变量当中取值,变量是字典或者列表:表达式:*变量名
    @ddt.data(*data)
    def test_print(self, a):
        print(a)

运行结果:
Launching unittests with arguments python -m unittest D:/python_workshop/python6/revise/futureloan_API_framework/class_ddt.py in D:\python_workshop\python6\revise\futureloan_API_framework
1
2
3
4
5
6
7
8
9
10

Ran 10 tests in 0.005s

OK

参考文章

https://www.cnblogs.com/hellowcf/p/6962935.html

原文地址:https://www.cnblogs.com/cnhkzyy/p/9317100.html

时间: 2024-10-11 23:51:15

接口自动化测试(三)的相关文章

python接口自动化测试三:代码发送HTTP请求

get请求: 1.get请求(无参数): 2.get请求(带参数): 接口地址:http://japi.juhe.cn/qqevaluate/qq 返回格式:json 请求方式:get post 请求示例:http://japi.juhe.cn/qqevaluate/qq?key=您申请的appKey&qq=295424589 接口备注:根据传入的参数 qq 号码和您申请的 appKey 测试 qq 的吉凶 请求参数说明(入参) : 名称    必填    类型      说明 key    

从0开始学习接口自动化测试(三)

感兴趣的小伙伴可以加入QQ群:556029945 仓储部分开发 ?和数据库交互,涉及到数据源的配置,为了小伙伴测试方便,这里采用H2数据库,以免有的小伙伴把代码写完了,却还要单独去安装如mysql,oracle的数据库,还要去写sql建表格,包括分享给他人都觉得不方便,以至于分外麻烦,这里我们就采用内存数据库,即启即用. ?1. 在pom中再次添加相关的依赖 <dependency> <groupId>com.h2database</groupId> <artif

python接口自动化测试(三)-requests.post()

上一节介绍了  requests.get()  方法的基本使用,本节介绍  requests.post()  方法的使用: 本文目录: 一.方法定义 二.post方法简单使用 1.带数据的post 2.带header的post 3.带json的post 4.带参数的post 5.普通文件上传 6.定制化文件上传 7.多文件上传 一.方法定义: 1.到官方文档去了下requests.post()方法的定义,如下: 2.源码: 3.常用返回信息: 二.post方法简单使用: 1.带数据的post:

APP接口自动化测试JAVA+TestNG(三)之HTTP接口测试实例

转载自:http://www.cnblogs.com/findyou/p/5388853.html 说明,本文为学习参考,将于一段时间后删除. 前言    前两篇普及相关基础知识后,本篇主要对举例对国家气象局接口自动化测试进行讲解(Get请求及结果断言),以达到自动化测试入门目的,除了前两篇的一些了解外,需要有一定的JAVA知识(HTTP相关). 目录 3.1 HTTP接口(GET)测试实例 3.1.1 待测接口说明 3.1.2 新建JAVA工程 1.工程目录说明 2.Common.java源码

【三】Jmeter接口自动化测试系列之Http接口自动化实战

作者:大虫 本文介绍 Jmeter 工具的 http 接口 自动化测试 实战! 为了通用性,就拿知乎 网站作为实战例子吧! 必备技能:http接口基础知识.抓包,本文不做详细介绍,不会的可以先百度恶补! 首先,我们把 知乎登录的包抓下来: 我们抓一下 获取 Jmeter 对应脚本如下: 获取发现栏目脚本: 使用正则表达提取器,提取栏目内容(what?不会正则表达式?找百度) 使用 foreach 控制器将提取结果合并到一个字符串 打印结果: 运行结果: 在进行http 接口测试的时候,通常需要注

零成本实现接口自动化测试 – Java+TestNG 测试Restful service

本文是转载Wade Xu的文章http://www.cnblogs.com/wade-xu/p/4229805.html 接口自动化测试 – Java+TestNG 测试 Restful Web Service 关键词:基于Rest的Web服务,接口自动化测试,数据驱动测试,测试Restful Web Service, 数据分离,Java+Maven+TestNG 本文主要介绍如何用Java针对Restful web service 做接口自动化测试(数据驱动),相比UI自动化,接口自动化稳定性

接口自动化测试框架搭建 – Java+TestNG 测试Restful service

接口自动化测试 – Java+TestNG 测试 Restful Web Service 关键词:基于Rest的Web服务,接口自动化测试,数据驱动测试,测试Restful Web Service, 数据分离,Java+Maven+TestNG 本文主要介绍如何用Java针对Restful web service 做接口自动化测试(数据驱动),相比UI自动化,接口自动化稳定性可靠性高,实施难易程度低,做自动化性价比高.所用到的工具或类库有 TestNG, Apache POI, Jayway r

颠覆你的Python接口自动化测试,约吗?

课程 一直以来,我都很喜欢收集大家问的比较多的问题,然后一边回答一边整理成文.今天也不例外,只是由一问一答,变成了三问三答. [你问] 我们为什么要做接口测试? [我答] 之前在<测试路上你问我答>系列里写过一篇答疑,详见<接口测试的是什么和为什么?> [你问] Python 语言现在为什么这么火? [我答] 这个问题,其实我的回答未必全面,大家在简书或者任何一个技术论坛搜索一下,很多阐述.推荐下面这篇:Python 为何能坐稳 AI 时代头牌语言? [你问] 老师,我之前看了你写

python结合excel数据轻松实现接口自动化测试(一)

在刚刚进入测试行业的时候,最开始也是做功能测试,我想很多伙伴和我一样,觉得自动化测试都很高端,很神秘.迫不及待的想去学习作自动化测试. 以前比较常用数据库+python做自动化,后面发现excel个人觉得更加适合,刚开始自己做自动话测试的时候,很急切的想立刻搭建好整个框架,但心急吃不了热豆腐, 还是从基本的开始,这里介绍python结合excel数据实现单个接口自动化测试的步骤,理解了这个,后面就可以用到整个框架,封装成公用模块,批量读取数据,执行数据. 现在以我们公司的一登录接口为列,输入参数