【精选】【python数据驱动+接口自动化测试】pytest+allure+yaml+jenkins+git(gitlab/gitee)下的接口自动化测试实战

您所在的位置:网站首页 怎么进行接口自动化测试 【精选】【python数据驱动+接口自动化测试】pytest+allure+yaml+jenkins+git(gitlab/gitee)下的接口自动化测试实战

【精选】【python数据驱动+接口自动化测试】pytest+allure+yaml+jenkins+git(gitlab/gitee)下的接口自动化测试实战

2023-11-07 09:51| 来源: 网络整理| 查看: 265

大家好,我是好学的小师弟。今天和大家分享下我前段时间的工作学习心得—接口自动化测试及其全套工作流程。

注:本文的侧重点在于工作流程,代码讲解、工具安装步骤方面可能就浅尝辄止了。

目录

前言:

工作流程:

一、数据存储

​二、类,方法、函数编写

三、pytest测试用例的编写与执行

​四、Git(gitlab/gitee)

五、jenkins拉取远程仓库代码与发送测试报告邮件

前言:

首先和大家介绍下什么是接口自动化?可能很多人都觉得,接口自动化就是写写代码,跑一下,验证下接口就完事了。但是这只是接口自动化的一部分,甚至当接口数目不多的时候,你写代码去验证,还不如点点点呢。

工作流程:

本次接口自动化实例讲解最主要的,就是让大家对整个工作流程有一个初步的认识。有了思路,做啥都省事了。(注:上图的UI自动化测试还要考虑到一个po【page object】的设计模式在里面)

1.数据存储:本次测试是基于数据驱动的接口测试。数据驱动简单的说,就是输入大量数据让你来进行测试。举个简单的例子---登陆测试,用户名错误,密码错误;用户名正确,密码错误;用户名为空,密码正确;用户名正确,密码为空。。等等,一般我们都是把这种数据放在excel中,但是放在excel中的话,读写不是太方便,所以我们这次采用yaml文件。通过yaml文件来存储我们的测试数据。

2.类,方法的编写:通过接口文档,requests库等,将接口请求写完,封装好。

3.测试用例(采用pytest框架):将数据引入到封装好的函数,方法中去,然后通过真实响应与预期响应做对比断言,即可完成测试。导入大量数据这个操作就用pytest去执行,这样就避免了你要写很多个for循环。

4.allure:生成测试报告,让测试结果更直观,更美观!美观很重要,领导需要量化的数据。

5.git:git把代码上传到远程仓库,方便大家下载修改,增加分支啥的,因为这个工程模块比较多,所以需要上传到一个公共的仓库,让大家一起开发

6.jenkins:从gitlab上拉取最新的测试用例代码,可以创建定时任务,定期执行,并把生成的测试报告生成邮件,发送给组里的开发,测试,领导查看。

一、数据存储

 上图就是我们要用到的目录,本文主要是让大家熟悉自动化这一套流程,所以测试用例包括函数写的都比较简单。

先创建一个空目录,然后创建一个空文件,把文件的后缀名改为yaml,即可创建yaml文件,下图是yaml文件中的内容

注:在yaml文件中,你在冒号(:)后面一定要空格,不然会出错。注意在yaml文件中不要用tab键;-是数组的意思,key:value就是json格式了,引号一般省略,一般都是默认字符串的。yaml里的单引号和双引号也是有讲究的,如果你的字符串中有空格或者特殊字符(如:转义\),那就需要你加引号。其中,字符串含有转义字符的时候,单引号不会转义,而双引号会转义。

- #这是登录的请求参数 page: 0 pagesize: 25 child_channel: python - # 这是预期的请求结果 code: 200

 读取yaml文件,注意读出来的yaml文件内容,就是跟你接口文档上写的那种请求参数模板,一模一样。

with open('../yaml_files/dict_yaml.yaml','r',encoding='utf-8')as f: y = yaml.load(f,Loader=yaml.FullLoader) """ 读取yaml文件 一般都用with open as来读取 后面根据业务需要,来对提取的数据进行二次分类 这里建议用绝对路径,或者把地址写成参数,最后传进来 怕出错 """

效果图:

二、类,方法、函数编写

将数据和函数进行分离,数据已经分离并读取好了,现在只需要编写你所需要的类、方法就行了。

import requests from read_yaml.read_csdn_python_hotrank import Read_csdn from pprint import pprint def login_csdn_python(paramss): #read_csdns = Read_csdn() # 请求 #paramss = read_csdns.read_csdn()[0] # print(paramss) url = 'https://blog.csdn.net/phoenix/web/blog/hot-rank' headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36'} csdn_url = requests.get(url=url, params=paramss, headers=headers) #pprint(csdn_url.json()) res = csdn_url.json() return res """ 这里就是写了一个函数,然后传入之前从yaml文件中读到的请求参数,看看这个接口能否调通 最后将接口的响应,用json()返回 内容不重要,重要的是这里返回的是真实的响应, 这里的真实响应,要和你在yaml中写的预期响应做对比,进行断言 这就是测试的原理本质内容 """ 三、pytest测试用例的编写与执行

注意:pytest的.py文件,必须是test_开头,pytest里的类必须是Test_开头且不要有init方法,定义的函数方法也要test_开头,好像_test也行,但是我一般都是test_。这里的allure和pytest需要大家自行去安装,pip install一下就行了,然后再配置下环境。

这里就是把之前分离的测试数据,当作参数,传入到你写好的函数里面去,然后不停的执行,断言,借助pytest,简化该步操作。

预期请求,预期响应在你的测试数据里就已经包含了

真实响应你通过发送预期请求获得

最后让预期响应与真实响应断言

import pytest from read_yaml.read_csdn_python_hotrank import Read_csdn from control_login_csdn.login_csdn import login_csdn_python import allure import os import logging import allure_pytest ''' allure报告方案的原理: 1.生成报告所需要的文件 2.使用一些工具打开可视化报告 ''' ''' #预期响应 respect_res = Read_csdn().read_csdn()[1]['code'] #真实响应 true_res = login_csdn_python()['code'] ''' class Test_csdn_login(): @allure.feature('登录模块') @pytest.mark.parametrize('indata,outdata', Read_csdn().read_csdn(filepath='../yaml_files/csdn_hot_rank_python.yaml')) @pytest.mark.xfail def test_login(self,indata, outdata): # 调用业务代码,获取响应,业务代码就是login_csdn.py这个文件中的函数 print('这是执行登陆测试用例') res = login_csdn_python(indata) # 断言 assert res['code'] == outdata['code'] print('测试结束了') """ 上面这个类,就是我们的测试用例了 可以看到里面装饰了很多@ @allure这些都是装饰我们的allure报告的 因为allure报告是英文,你装饰了以后,title就变成了中文,方便阅读 这里allure有很多装饰语法,大家有兴趣的可以去看看 如果是ui自动化测试的话 你在selenium的时候,可以截报错图,后期allure也可以把图片带到测试报告中去 @pytest这些就是pytest 的语法了 上文中的 @pytest.mark.parametrize('indata,outdata', Read_csdn().read_csdn(filepath='../yaml_files/csdn_hot_rank_python.yaml')) 意思就是不停的传入([预期请求1,预期响应1],[预期请求2,预期响应2],[预期请求3,预期响应3],[预期请求4,预期响应4],[预期请求5,预期响应5])等等 省了我们不停的去for循环了 @pytest.mark.xfail 这个语法就是当前这个测试用例,我觉得他可能是错的。如果她错了,那很正常;如果对了,那就xpass过了。 @pytest有很多种语法 我个人觉得pytest的意义,就像是一个筛选器,可以让你重复运行某个指定的测试用例,或者跳过,或者想怎么来就怎么来。 就像考试一样,以前只能按顺序来考试。每题都要写 现在有了pytest,你想写到哪一题停下来,你就停下来,你想写哪几道题,或者重复写几遍都随你。 类似于活字印刷术吧 """

这里我在运行的时候,有一个坑。在没用jenkins的时候,我的pytest执行语句,是在pycharm终端执行的。

注意:尽量把执行测试用例的test_run.py文件放到根目录下面

执行语句:

pytest -sq test_run.py --alluredir=./report/tmp --clean-alluredir allure serve ./report/tmp #这里allure服务就起来了

效果图:

 生成allure测试报告:

四、Git(gitlab/gitee)

因为一个工程,可能需要好几个人去写代码,所以我们就需要一个公共仓库上传拉取代码,方便每一个人进行修改。这里的公共仓库看大家公司需求了,用的比较多的是gitlab。这里做演示的是用gitee来的,因为码云是国内的,网速够;我的gitlab是公司内网的,官网的虽然也有,但是网速不行,经常打不开。git是一个工具,用来上传或者拉取公共仓库里的代码。

注意:大家需要先去gitlab或者gitee中先建一个项目,如果选择ssh连接,还需要ssh验证,设置公钥和私钥。我们这里用的是https上传,所以最后只需要填写账号密码就行了。

首先大家要下载git

 然后右击你的工程项目,选择git bash here,接着就会出现这么一个框框

 然后输入代码

git init #初始化本地仓库 git add. #将项目全部添加进去 git commit -m "上传至本地仓库" git remote add origin "你的远程仓库http链接" git push origin master #把你的本地仓库里的代码 推送到远程仓库去了 #从远程仓库拉到本地的指令 git clone "远程仓库代码的存放地址"

通过这一步,这样你们测试开发小组里的成员都可以从仓库拉取你的代码,对你的代码进行修改,添加,二次开发。

效果图:

本地工程文件夹里面,也有本地仓库了。

.git文件,一般被隐藏起来了

五、jenkins拉取远程仓库代码与发送测试报告邮件

 2021.12.27更新:【jenkins_链接】jenkins如何构建定时任务,执行定时任务

下载jenkins,注意一般我们的jenkins都是部署在linux服务器上的,这里为了方便,我把jenkins部署在我的windows上了。

下载的时候,注意下,因为jenkins的默认端口和tomcat的默认端口都是8080,所以为了避免冲突,我们把jenkins的默认端口改成其他数字。

注意:Jenkins需要安装jdk和python环境,这个只需要在你的管理Jenkins---系统配置/全局配置中导入你本地的jdk和python安装目录即可

 打开jenkins,创建一个freestyle任务,当然一般都是流水线任务。

 若想拉取仓库代码,则执行下图操作

 jenkins拉取gitee仓库代码成功。项目存放在你的jenkin目录下的workspace里面

我们继续已代码在本地为例,执行我们的jenkins。但是要注意,要先找到我们的本地项目程序,导入到我们jenkins的工作区间去。

 这里成功导入项目代码后,找到我们的构建,输入命令行指令,执行我们的pytest;注意,因为这里的test_run.py文件是在根目录下的,所以我们不需要cd,直接执行pytest语句就行了;还有就是,因为我们这个jenkins是安装在windows上的,所以我们选择execute windows而不是execute shell

 要想生成allure报告,还有下方的两处地方要填写。

 做完这些,你就可以执行jenkins,并生成allure报告了

jenkins生成allure测试报告效果图: 如果想要jenkins把生成的测试报告通过邮件,发送给同事或者领导查阅,只需先确认,收件人邮箱有没有开启smtp,然后在配置中设置发件人的邮箱,以及jenkins的url即可。最后在Jenkins创建的那个项目的最后,添加收件人邮箱地址即可。

以上就是一个粗浅的接口自动化测试全部流程,我这里只是向大家分享了下我的一个思路,希望能对大家有所帮助。

新人创作不易,觉得不错的看官,点个赞吧,么么哒!!!

转载注明出处!

                                                                 



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3