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

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

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

目录

前言:

工作流程:

一、数据存储

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

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

​四、Git(gitlab/gitee)

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


前言:

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

工作流程:

【python数据驱动+接口自动化测试】pytest+allure+yaml+jenkins+git(gitlab/gitee)下的接口自动化测试实战_第1张图片

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

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

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

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

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

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

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


一、数据存储

【python数据驱动+接口自动化测试】pytest+allure+yaml+jenkins+git(gitlab/gitee)下的接口自动化测试实战_第2张图片

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

先创建一个空目录,然后创建一个空文件,把文件的后缀名改为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来读取
后面根据业务需要,来对提取的数据进行二次分类
这里建议用绝对路径,或者把地址写成参数,最后传进来
怕出错
"""

效果图:

【python数据驱动+接口自动化测试】pytest+allure+yaml+jenkins+git(gitlab/gitee)下的接口自动化测试实战_第3张图片

二、类,方法、函数编写

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

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服务就起来了

效果图:

【python数据驱动+接口自动化测试】pytest+allure+yaml+jenkins+git(gitlab/gitee)下的接口自动化测试实战_第4张图片

 生成allure测试报告:

【python数据驱动+接口自动化测试】pytest+allure+yaml+jenkins+git(gitlab/gitee)下的接口自动化测试实战_第5张图片四、Git(gitlab/gitee)

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

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

首先大家要下载git

 然后右击你的工程项目,选择git bash here,接着就会出现这么一个框框【python数据驱动+接口自动化测试】pytest+allure+yaml+jenkins+git(gitlab/gitee)下的接口自动化测试实战_第6张图片

 然后输入代码

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


#从远程仓库拉到本地的指令
git clone "远程仓库代码的存放地址"

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

效果图:

【python数据驱动+接口自动化测试】pytest+allure+yaml+jenkins+git(gitlab/gitee)下的接口自动化测试实战_第7张图片

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

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

【python数据驱动+接口自动化测试】pytest+allure+yaml+jenkins+git(gitlab/gitee)下的接口自动化测试实战_第8张图片

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


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


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

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

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

【python数据驱动+接口自动化测试】pytest+allure+yaml+jenkins+git(gitlab/gitee)下的接口自动化测试实战_第9张图片

【python数据驱动+接口自动化测试】pytest+allure+yaml+jenkins+git(gitlab/gitee)下的接口自动化测试实战_第10张图片

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

【python数据驱动+接口自动化测试】pytest+allure+yaml+jenkins+git(gitlab/gitee)下的接口自动化测试实战_第11张图片

 若想拉取仓库代码,则执行下图操作【python数据驱动+接口自动化测试】pytest+allure+yaml+jenkins+git(gitlab/gitee)下的接口自动化测试实战_第12张图片

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

【python数据驱动+接口自动化测试】pytest+allure+yaml+jenkins+git(gitlab/gitee)下的接口自动化测试实战_第13张图片我们继续已代码在本地为例,执行我们的jenkins。但是要注意,要先找到我们的本地项目程序,导入到我们jenkins的工作区间去。

【python数据驱动+接口自动化测试】pytest+allure+yaml+jenkins+git(gitlab/gitee)下的接口自动化测试实战_第14张图片

【python数据驱动+接口自动化测试】pytest+allure+yaml+jenkins+git(gitlab/gitee)下的接口自动化测试实战_第15张图片

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

【python数据驱动+接口自动化测试】pytest+allure+yaml+jenkins+git(gitlab/gitee)下的接口自动化测试实战_第16张图片

 要想生成allure报告,还有下方的两处地方要填写。【python数据驱动+接口自动化测试】pytest+allure+yaml+jenkins+git(gitlab/gitee)下的接口自动化测试实战_第17张图片

【python数据驱动+接口自动化测试】pytest+allure+yaml+jenkins+git(gitlab/gitee)下的接口自动化测试实战_第18张图片

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

【python数据驱动+接口自动化测试】pytest+allure+yaml+jenkins+git(gitlab/gitee)下的接口自动化测试实战_第19张图片

jenkins生成allure测试报告效果图:
【python数据驱动+接口自动化测试】pytest+allure+yaml+jenkins+git(gitlab/gitee)下的接口自动化测试实战_第20张图片 如果想要jenkins把生成的测试报告通过邮件,发送给同事或者领导查阅,只需先确认,收件人邮箱有没有开启smtp,然后在配置中设置发件人的邮箱,以及jenkins的url即可。最后在Jenkins创建的那个项目的最后,添加收件人邮箱地址即可。


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

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

转载注明出处!

                                                                 

你可能感兴趣的:(jenkins,git,python,测试工具,自动化)