各位测试的小伙伴,现在主流的自动化测试实现的方式非常多,比如小伙伴已经在使用的 jmeter+ant 完成自动化测试,又或者 Apipost 这种接口测试工具完成单接口或场景的自动化测试等等,但各有优缺点,工具实现自动化的话比较方便,但也有缺点,不能定制化,只能依照工具已有的功能或插件去做,如果碰到特殊场景需要处理,工具就稍显鸡肋,但如果使用代码完成接口自动化的话,相对来说可扩展性就强一些,不管是前置、后置、SQL、测试数据制造、数据处理等等,代码的处理扩展性都是较强的,缺点就是维护成本相比较工具来说是要高一点的。
比如现在有一个场景是这样的:用户登录某系统后提示需要VIP认证才能继续使用系统,那么如何才能知晓当前用户是不是VIP并继续展示对应的VIP界面呢,仅通过 cookie判断?好像还不够。 如果接口鉴权方式是需要二次封装cookie 的话,工具好像又不太支持,但如果用代码的话,实现起来还是比较轻松的。
HOST = "http://xxx.xx.xx.xxx"
import requests
def cookies_v2():
"""
登录
return: 原生态cookie里的sessionID
"""
url = f'{HOST}/login' #登录接口地址
payload = {'username': 'zhangsan', 'password': '123456'} #请求参数
response = requests.post(url, data=payload) # 发送请求
return session_id=response.cookies['sessionid'] # 获取原生态cookie里的sessionID
def add_interface(session_id):
url = f'{HOST}/xx/xx/xxx/' #业务接口
# 二次封装、把session +token 合并成一个新的cookie
cookies_k = {"sessionid": session_id, "token": "123456"}
# 发送请求
response = requests.get(url, cookies=cookies_k)
# 获取响应信息
# 查看请求头的cookies
print(response.request.headers)
if __name__ == '__main__':
session_id= login()
add_interface(session_id)
可以看到,上面用代码进行二次封装起来还是比较方便的,但是仅写代码还是不够的,如何从0实现一个完整的接口自动化方式呢,今天这里给大家介绍一种自动化实现方式--------pytest框架+allure报告结合jenkins 完成自动化测试。
由于jenkins 内需要安装和配置许多东西,每次安装配置都比较麻烦,这里我们使用docker 去搭建jenkins 环境,搭建好了自行封装成镜像即可。
1、如果是第一次搭建的话,首先需要一台linux 服务器or 虚拟机也可,先安装docker,安装步骤可自行根据当前的系统环境的版本进行百度安装即可,安装完docker 之后,可以使用:docker -version 检查一下docker 是否安装成功,若出现有版本信息表明已经安装成功。接下来需要使用docker 安装jenkins,输入以下命令
docker search jenkins #搜索jenkins镜像
2、搜索到了之后可以看到有比较多的jenkins镜像选择,我们能选择第二个jenkins,输入命令进行下载
docker pull jenkins/jenkins #下载jenkins镜像
3、下载完成之后,可以使用 docker images 查看当前的镜像仓库是否已经存在了刚下载的 镜像
4、这个时候要新增一个文件夹作为jenkins 的挂载目录,挂载目录就是容器内部文件和系统文件的一个通道,方便以后我们往容器里存放文件,同时需要给这个文件的权限提升一下,挂载目录的作用及使用稍后会讲到
mkdir /usr/local/jenkins_home #宿主机新增一个文件夹当作挂载目录
chmod 777 /usr/local/jenkins_home #将该文件夹权限提升,防止操作以后出现权限不够的情况
docker run -d --name=jenkins -p 8888:8080 -v /usr/src/jenkins_home:/var/jenkins_home --restart=always jenkins/jenkins
docker run 命令:
--name=jenkins :容器名称
-d :创建一个守护式容器在后台运行
-p:表示端口映射,前者是宿主机端口,后者是容器内的映射端口
-v:表示目录映射关系(前者是宿主机目录,后者是容器内对应的目录)
--restart=always:表示docker 启动时,容器会自动重启
jenkins/jenkins :启动该容器的镜像名称
5、输入以上命令以后,如果没有报错,这个时候我们可以在浏览器输入:linux主机or虚拟机的IP地址:8888 ,如果可以正常访问并显示了以下画面就表示搭建成功了。我们根据提示找到密码并输入,按提示完成安装,再根据提示完成默认推荐插件的安装。
jenkins 安装完了之后,此时我们需要在jenkins的容器里安装python、pytest、allure环境,(下面步骤如果大家嫌麻烦,也可以直接用我已经封装好的docker 镜像,已经配置好了python、pytest、allure环境可以直接pull下来使用,其他第三方库需要自己按需求安装)
docker pull registry.cn-hangzhou.aliyuncs.com/diemaidou/jenkins:v2
1、 我们可以在宿主机下载python3,并拷贝至容器内
wget https://www.python.org/ftp/python/3.9.9/Python-3.9.9.tgz --下载python
docker cp Python-3.9.9.tgz jenkins:usr/src --复制到容器内
docker exec -it -uroot jenkins /bin/bash --进入容器内
2.、使用apt-get 命令安装软件,按如下命令执行即可
#同步索引,这样才能获取最新的软件包,执行的结果是会更新
# /etc/apt/sources.list 和 /etc/apt/sources.list.d 中列出的源的索引
apt-get update
#升级已安装的软件包
apt-get upgrade
#安装依赖包
apt-get -y install gcc automake autoconf libtool make
apt-get -y install make*
apt-get -y install zlib*
apt-get -y install openssl libssl-dev
#切换目录到复制的python3文件所在位置
cd usr/src
#解压缩python安装包
tar -zxvf Python-3.9.9.tgz
#将解压缩后的Python-3.9.9重命名为py3
mv Python-3.9.9 py3
#进入py3目录
cd py3
#make编译安装
./configure --prefix=/usr/src/py3
make
make install
#添加软链接
ln -s /usr/src/py3/bin/python3.9 /usr/bin/python
ln -s /usr/src/py3/bin/pip3.9 /usr/bin/pip
3、输入 python 或者 pip 没有报错,表示就可以了(如想存在多个python版本,可以在软连接用python3 和pip3以作版本区分)
1、当python 安装完的时候,我们需要接下就可以安装 pytest了 ,pytest是python的一个第三方库,我们需要通过pip 命令去安装一下
#安装pytest 库
pip install pytest
#安装完pytest库后,我们需要 添加pytest的软连接,首先找到python的安装目录并进去,看看是否存在pytest
cd /usr/src/py3/bin
#添加软连接,方便我们在任何地方都可以执行pytest命令
ln -s /usr/src/py3/bin /usr/bin/pytest
2、添加软连接后,我们输入 pytest 命令看是否能被识别,如果可以正常识别执行,就表明安装成功
1、allure 是一个报告服务,可以与pytest框架结合并生成报告,我们可以先去github 下载allure:Releases · allure-framework/allure2 · GitHub ,在windows 系统下载完成之后我们可以用 xftp工具传到 服务器上,然后再拷贝进容器并解压
#拷贝进容器内部
docker cp {allure压缩包} jenkins:usr/src
#进入容器内部
docker exec -it -uroot jenkins /bin/bash
#切换目录到复制的allure文件所在位置
cd usr/src
#解压缩allure安装包
tar -zxvf {allure压缩包}
#添加软连接,方便任何地方执行allure 命令
ln -s /usr/src/{解压后的allure文件夹名字}/bin /usr/bin/allure
2、此时我们输入allure检查一下 ,没报错就安装成功了,我们还需要安装一个 python库,allure-pytest,这个库是pytest框架和allure 报告连接的桥梁 ,使用 pip -install allure-pytest安装即可。
上述这些都安装完了之后,这个时候我们需要给jenkins配置一些东西,才能生成报告和发送邮件
1、我们登录jenkins在里面找到【系统设置】-【插件管理】,添加一个 【Allure Jenkins Plugin 】插件并安装
2、安装完插件之后,我们需要进入jenkins系统设置的【全局工具配置】,找到 Allure Commandline,新增一个 Allure Commandline,填写allure 的信息
1、完成了allure报告的配置之后,我们需要配置一下邮件发送的,虽然jenkins自带了一个邮件发送,但是太过简便不足以满足我们的定制化要求,首先同样的需要进入【插件管理】需要下载一个插件:Email Extension Plugin,下载安装好了之后,我们还需要配置一下,【系统管理】-【系统配置】,找到:Jenkins Location,填写自己jenkins URL 和邮件地址。
2、填写完了之后,往下滑动找到:Extended E-mail Notification,这个是扩展邮件配置,也就是我们一开始下载的邮件插件,我们依次填写邮件配置内容,jenkins默认的邮箱是可以测试发送邮件来检测配置是否正确的,但是这个扩展邮件插件的配置不支持测试发送,所以此处一定要填写正确,否则可能无法成功的发送邮件,如无法知晓配置是否正确,可以将配置信息,配置到最下方的【邮件通知】先行调试,可以调试通了之后,再复制配置值到这个扩展邮件配置即可,邮件配置完之后就可以保存了
1、上述的配置都没问题之后,我们就可以进入登录jenkins新增一个构建任务了,比如新增一个 自由风格的 interface_test 构建任务
2、新增完成之后,我们什么暂时都不设置点击保存,然后直接点击构建,构建完成之后,会在jenkins_home的目录下新增一个workspace 目录,这个目录下会有一个名叫 interface_test 的文件夹,
① 【workspace 】 这个目录就是jenkins 的工作空间,jenkins默认所有的构建任务都会放在 workspace目录下
②【interface_test】 这个文件夹就是 我们刚刚新增的这个构建项目的文件夹
3、还记得我们最开始创建容器的挂载目录吗,我们把宿主机的一个目录:/usr/src/jenkins_home,挂载到了容器内部的jenkins目录下:/var/jenkins_home,所以我们可以直接用 【xftp】工具进入宿主机的 /usr/src/jenkins_home 目录下,就可以看到 workspace 目录了,并且下面还有一个 interface_face 文件夹,我们再进入interface_test 文件夹,在里面新增一个py文件,这个py文件就会同时也会存在于容器内的/var/jenkins_home/workspace/interface_test 文件夹内,我们在这个文件夹里面 写一个简单的test.py文件,内容如下
import pytest
class Test_class():
@pytest.mark.parametrize('msg',['登录成功'])
def test_login(self,msg):
assert msg=='登录成功'
4、写完了之后,我们找到【interface_test】这个构建项目,找到设置,找到【设置】-【构建】这个时候我们就可以新增一个 shell 脚本测试一下: pytest test.py,点击保存,然后构建,如果上述步骤都没错的话,应该就可以构建并看到控制台的构建信息了,注:pytest默认断言失败则会认定构建失败,具体可以看控制台日志
5、测试构建成功之后,这个时候就可以加入allure报告步骤了,首先找到构建任务找到【设置】,添加一个生成allure 报告的shell脚本,中间我们可以使用【WORKSPACE】变量,这个变量值就是当前项目的目录
6、我们再添加一个构建后步骤,选择 Allure ,并填写一下生成allure报告的地址,这个地址就是shell脚本中指定的 allure-results 目录
7、这个时候可以再尝试构建一下,如果仍然可以构建并打开报告,表明报告步骤是没有问题的,接下来就可以将我们的报告通过邮件发送了
8、邮件发送也是需要添加一个构建后的步骤,将已经生成的报告文件发送至指定的邮箱,新增构建后步骤,选择:Editable Email Notification
9、添加之后,再填写分别收件人邮箱地址、内容类型、邮件内容,html模板放附件,可自行取舍或修改,按照如下图填写构建后步骤保存之后,就可以再次构建了,如步骤无误,就可以收到报告邮件了,邮件配置默认是构建成功才发送邮件,但是pytest框架只要断言失败就会认定为构建失败,所以如果有需要我们可以在【构建后步骤】的邮件通知高级设置改一下,任何情况构建均发送邮件,视情况设置,如构建未收到邮件,可查看构建的控制台日志 ,检查一下哪个步骤出了问题。
总结:
这套自动化流程,需要配置的环境比较多,本人在摸索中也裁了不少坑,中途比较容易出现配置错,建议各位如果要搭建,最好每做一个步骤都要检查是否成功,不然后续出问题较难排查,这篇分享由于篇幅步骤过多,没有跟git工具结合成CI/CD完整自动化流程,有需要的小伙伴可以自行 将git 流程加入到jenkins构建步骤中来,同时欢迎大家一起交流和指正。