基于pytest与postman的数据自动采集接口自动化测试实践

本文已被51测试网收录:https://mp.weixin.qq.com/s/ikex_lNScqw8yzSTG--uvw

一、 前言

本文跟大家介绍的是基于python测试框架pytest 与postman数据自动采集的接口自动化测试实践方案,首先了解下为什么是基于pytest框架而不是使用unitest?网上的对比资料很多,概括起来就是pytest 相较于 unittest 代码更加的简洁和灵活,最为跳跃的一点就是 fixture 机制,并且pytest有很多的第三方插件可以扩展和继承,大家可以深入去查一查。
第二个了解的是为什么要做数据自动采集,做数据驱动很多教程推荐的是将数据写在excel中,然后通过程序去读取。但我更推荐的是通过软件自动采集所需数据,这样可以大大节省手动在excel录入数据的时间。推荐使用postman采集数据,它是一款做开发人手必备的接口调试工具,几乎能发送所有类型的HTPP请求,在打开代理模式以后能够自动抓取pc端浏览器或者APP端请求的接口数据,存储并导出后为json格式的数据源,简单方便。

二、 自动化框架流程

整个代码框架除了数据来源从postman采集,其他所有封装的公共库以及具体的测试用例均使用代码编辑器如pycharm编写python代码,其中需要用到的pytest、requests、allure等库可以直接使用pip命令安装。从数据采集到完成自动化测试并输出测试报告的流程如下图:


image.png

1) 编写公共库:如果某个函数需要被多次引用,那么就可以封装成公共函数,这些封装的函数主要有:断言、全局常量、log日志、发送请求、用户session、加密等。跟业务无关,可以先封装好。


image.png

2) 编写配置文件:配置文件内容如环境参数、文件存储路径、版本号,以及配置文件的读写封装等,也是编写测试用例之前必须封装好的内容。


image.png

3) 数据自动采集:如下图所示,打开代理模式,设置代理端口如:5555,设置抓包的存储路径,比如一个功能流程就可以单独存一个集合,最后设置过滤地址为本系统,以免抓到与系统无关的接口 。


image.png

4) 数据导出json文件存储:选中某个集合后,右键选择export导出,选择第一个json数据格式。导出的数据源放入项目对应的目录Params->json下


image.png

5) 编写数据读取函数:编写jsonparam.py函数,解析postman格式的json数据。因为postman有些数据不是我们需要的 有些需要拼接,所以需要单独封装一个转换格式的函数,方便测试用例数据读取使用。


image.png

6) 编写测试用例:在Testcase下编写测试用例的前置和后置参数文件conftest.py文件(此文件名为是固定的,不能写别的)。


image.png

编写具体的测试用例,测试用例均要使用test开头或结尾(否则框架无法识别)


image.png

7) 运行测试用例:如果需要运行Testcase下所有测试用例,可以在根目录建run.py文件,若只需要单独运行某个功能的测试用例,也可以在具体的测试文件的main函数里面使用pytest.main("test_xxx.py")命令运行。


image.png

8) 输出日志文件:过程中使用self.log.info('请求参数:%s' % data)打印日志信息,作为记录和调试使用。


image.png

9) 输出测试报告:最后可以集成allure插件,输出更加直观漂亮的测试报告。集成过程网上也有很多教程,但是坑非常多,大家需要注意以下内容:
1.建议使用 pytest 3.8.0 版本
命令:pip install pytest
注意:勿使用pytest过高版本,且勿使用allure-pytest插件,会一直报错pytest找不到allure错误,网上的办法也解决不了,亲测使用 pytest 3.8.0 搭配 pytest-allure-adaptor 1.7.10 可以解决
2.建议使用 pytest-allure-adaptor 1.7.10 版本
命令:pip install pytest-allure-adaptor
3.需要安装jdk 1.8以上版本
4.需要安装 allure-commandline(先安装npm包)
命令:npm install -g allure-commandline --save-dev

接下来按照在run.py文件中写的代码
5.pytest命令基础上加--alluredir,生成xml报告。
pytest -s -q --alluredir [xml_report_path]
6.使用 Command Tool 来生成我们需要的美观报告。
allure generate [xml_report_path] -o [html_report_path]
7.直接用chrome浏览器打开报告,报告会是空白页面
解决办法:在pycharm中右击index.html选择打开方式Open in Browser即可

image.png

三、 代码结构&源码

image.png

框架代码分为如下几个模块:Common公共库、Conf配置库、Log封装日志、Params数据源和读取数据、Report测试报告、TestCase测试用例、run.py执行文件,几个重要的函数如下,其他代码已经放到开源github上,大家自行下载。
源码地址:https://github.com/kayie77/PyTestApiAuto

  1. Common->Assert.py 封装断言
    直接使用python的assert断言函数,用于判断一个表达式,使用方式:
    assert test.assert_code(response['code'], 200)


    image.png
  1. Common->Request.py 封装请求
    目的是封装公共请求参数和封装返回内容


    image.png
  1. Conf->Config.py 读取配置文件
    在config.ini定义好文件内容,需要再写一个读写配置文件的函数


    image.png
  1. Params->jsonparams.py 读取数据源
    Jsonparams的作用是从Postman导出的json数据源中截取所需要的数据,如header、url、body等参数,拼接成requests请求需要的格式返回。


    image.png
image.png
  1. TestCase->test_xxx.py 测试用例
    @allure.story 用于定义被测功能的用户场景,即子功能点
    @pytest.mark.parametrize传多个参数,实现执行不同数据
    从数据源获取数据后发起请求,断言结果,设置下一接口所需的变量参数


    image.png
  1. run.py 执行文件
    获取报告输出位置;定义好需要运行哪些测试集,如果需要全部运行,则不需要定义,会自动找到Test开头(结尾)的包下面test开头(结尾)的py文件;使用pytest.main(args)执行测试用例,定义好allure报告所需参数,使用shell命令生成allure报告


    image.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
禁止转载,如需转载请通过简信或评论联系作者。
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,332评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,508评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,812评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,607评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,728评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,919评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,071评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,802评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,256评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,576评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,712评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,389评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,032评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,798评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,026评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,473评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,606评论 2 350