自动执行自动化测试用例

news2025/7/26 8:50:42

phpunit 接口自动化测试系列

所有自动化测试用例最终的目的都是一样的,实现无人值守的自动化运行。而目前最常用的就是Jenkins来实现这个功能,在前面的Webdriver+Python页面自动化的教程中我们已经详细讲解了如何将自动化测试用例接入到Jenkins中。本章我们只讲述接口接入的步骤,不再详细讲述相关的操作原理,同时加入接口中自动化检测点的设置技巧。

6.1 接口自动化接入Jenkins

第五章我们讲到了如何利用TestSuite组织测试用例,当我们编写好了相应的TestSuite文件,再接入到Jenkins就容易的多了。下面我们分步来完成这个操作:

(1)上传自动化测试代码到SVN或是Git。要对自动化测试代码进行管理,上传到代码管理工具中,如上传到Git:git@gitlab.corp.ncfgroup.com:zhongchou/zcapitest.git

(2)打开Jenkins,创建Job。打开Jenkins网站,创建Job如:Zhongchou-api-AutoTest-OnlineEnv,并对项目描述,丢弃旧的构建和启用项目安全进行相应的配置,如图6.1.1所示:


(3)源码管理和构建触发器。在源码管理中我们选择Git,并将上面的Git地址填写进去。并且在构建触发器的时候,我们设置成定时执行。详细说明见:http://blog.sina.com.cn/s/blog_68f262210102vmlx.html,具体配置如图6.1.2所示:


(4)填写构建命令。构建命令是我们执行自动化测试用例的命令行,如果没有此命令行,则Jenkins就不知道如何执行自动化测试,针对我们第五章编写的用例集,我们的构建命令应该是:

Phpunit OnlineRegression.php

将命令填写到Jenkins配置页—>构建à“Execute shell”à“Command”框中。

(5)失败邮件通知。如果测试用例执行失败了,我们希望邮件通知相关人员,这里就可以单击“构建后操作”->“E-mail Notification”,然后在Recipients后填写要接收邮件的邮箱地址。同时选择“每次不稳定的构建都发送邮件通知”即可。

(6)保存配置。单击保存后,就将测试用例接入到了,Jenkins中,并且每个小时会自动执行一次。

(7)手工执行。在Jenkins页面上,打开刚刚创建的Job Zhongchou-api-AutoTest-OnlineEnv,单击页面左侧的“立即构建”,即可马上执行自动化测试用例。如图6.1.3所示:


6.2 Jenkins实现执行失败短信通知
现在手机使用这么发达,邮件通知感觉到不那么及时了,如果不经常查看一下邮箱,即使是Jenkins给我们发了邮件我们也不能及时收到。所以如果自动化测试用例执行失败了,能发送短信,这不是很好吗?

遗憾的是,Jenkins没有这个功能,如果想实现这个目标,我们只有自己努力了!下面我们分析一下思路:

(1) 我们要根据执行结果来分析出测试用例执行成功了或是失败了,这个虽然Jenkins会自己分析,可是我们没有办法获取它分析的结果。所以我们要保存执行结果。

(2) 解析保存的执行结果,如果失败了,解析出哪些儿测试用例失败了,把测试用例名字保存下来,以便作为我们失败通知短信的内容。

(3) 需要一个发短信给固定手机的方法,我的办法是我们公司有一个公共短信平台,申请了相关的权限后就可以直接调用发短信接口向任何手机号发短信。读者要想达到这个目的,请自行想办法,因为没有免费的短信接口。

(4) 上面三方面我们需要写一个脚本来做这些儿事情,我们暂时命名为TestGetResult.php,因为调用接口php最方便。脚本都是在linux下执行的,所有python,php都不会相互影响的。脚本内容涉及公司接口,就不给大家展示了。

(5) 如果测试用例执行成功,则直接执行Jenkins返回成功,如果失败,则调用此脚本发送短信,并同时调用Jenkins发送邮件。所以我们的脚本执行不能影响Jenkins对执行结果的判断。

(6) 为了达到这个目的,我们需要在“构建”—>“Excute Shell”下添加脚本语言,如下所示:

  #!/bin/sh
  phpunit OnlineRegression.php >./Result/ApiResult.log
  if [ $? -ne 0 ];
  then
      php TestGetResult.php
     exit 1
 else
      exit 0
  fi

脚本讲解:

A,第02行我们是调用执行suite文件,执行测试用例,并将结果保存到./Result/ApiResult.log文件中。

B,第03行判断第一行执行的结果,如果执行结果不等于0,说明测试用例执行失败,然后调用05行我们处理测试结果,发短信的脚本。

C,第06行很关键,当测试用例执行失败后,第02行会返回一个非0的结果,此时我们调用05行执行。05行执行成功后会返回0,此时Jenkins接到的结果代码是0,会把执行结果置成成功,并且不会发邮件。所以06行,我们人为的返回一个非零的代码给Jenkins,为了不影响Jenkins的结果。

D,第08行和06行的目的是一样的,当03行判断结果为失败时,返回代码是非零的,如果不在08行添加一个人为地返回0的语句,测试用例执行成功时,Jenkins根据返回码也会认为是失败。为了不影响Jenkins原来的判断结果,我们添加了06和08两个强制返回语句。

至此,我们完成了Jenkins的配置,这些儿配置可以满足我们对自动化测试用例的失败监控。当然,如果你们有其他的需要,可以去网上学习Jenkins的其他配置及插件的使用,学无止境嘛!

6.3 接口自动化检测点的设置技巧
对于接口自动化的检测其实也比较简单,先对接口返回值进行json_decode()。然后对解压后的数组进行判断,和预期相同就成功,不同就失败。这看似很简单,可是要设置好一个检测点,才能高效的发现Bug,还是需要一些儿技巧的。

(1)检测返回的错误码。针对一些儿接口,比较注重成功或是失败,而不是特别注重返回的数据,或都没有返回数据的时候,我们就检测返回的错误码。如果是正确的就成功,错误的就失败。如: t h i s − > a s s e r t E q u a l s ( 0 , this->assertEquals(0, this>assertEquals(0,data[“errno”]);

(2)检测返回的数据。有的时候接口的错误码相同,但是可能是因为不同的原因引起的,此时我们就要检测返回的数据,如error。或者接口比较注重返回的数据,就要检测返回的Data是否和预期的相同或是包含。如:

i n d e x = s t r p o s ( index =strpos( index=strpos(data[‘data’][‘name’],‘8905’);

t h i s − > a s s e r t n o t E q u a l s ( − 1 , this->assertnotEquals(-1, this>assertnotEquals(1,index);//判断结果是否包含关键字

(3)检测关键字段。有些儿接口会在后期优化的时候增加字段或是返回值必须具有某些儿字段值才算成功的话,我们就要对特定的字段进行检测。如:

t h i s − > a s s e r t A r r a y H a s K e y ( " i s f r i e n d " , this->assertArrayHasKey("is_friend", this>assertArrayHasKey("isfriend",data[‘data’],“新增加字段:is_friend”);

(4) Assert语句的位置。对于接口自动化,Assert语句是必不可少的,但是这个语句的位置还是有讲究的。如果在接口处理的时候有输出或是要记录一些儿内容,就要考虑一下这个Assert语句的位置了,因为一旦这个语句执行失败,则程序就不再继续往下执行。例如:

if($data['errno']==0)

{ 

$this->assertEquals($dr->readnodevalue("login","serrno"),$data["errno"]);

TextOperation::writetoken($data['data']['token']);

 print('接口login:登录成功------------------OK'.'\n');

}

Else

{

print("接口login:登录失败----------Failure!"."\n".$content."\n");

TextOperation::writetxt("接口28:登录失败-----Failure!"."\n".$content."\n");

$this->assertEquals($dr->readnodevalue("login","serrno"),$data["errno"]);

}

(5)Assert后适当的输出。因为我在网上查看了一下phpunit相关的输出报告,好像没有什么好的样式。我们就在接口执行成功或是失败后做出一些儿输出,这样我们就可以对结果进行分析,然后定制出自己的执行报告。如果上面的例子中:

print('接口login:登录成功------------------OK'.'\n');

or

print("接口login:登录失败----------Failure!"."\n".$content."\n");

本章小结

本章我们介绍了如何将测试用例接入到Jenkins中,实现无人值守的自动化执行。并通过定制化配置,达到我们想要的一些儿个性要求,如执行失败给相关人员发短信。最后又介绍了接口自动化测试用例编写过程中检测点设置的相关技巧,通过一些儿小的技巧可以提高我们测试用例执行的效率,将输入结果更加完美。

最后:下方这份完整的软件测试视频学习教程已经整理上传完成,朋友们如果需要可以自行免费领取 【保证100%免费】

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/368326.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

RK系列(RK3568) i2s 音频输入 麦克风驱动

平台:Android12SOC:RK3568外围芯片:XS9922i2s简介:从上图看I2s主要的线有:SDO SCLK LRCK MCLK I2S协议只定义三根信号线:串行时钟信号SCLK(BCLK)、数据信号SD和左右声道选择信号WS。(1&#xff…

QT入门Containers之QStackedWidget

目录 一、QStackedWidget界面相关 1、布局介绍 2、插入界面 3、插入类界面 二、Demo展示 此文为作者原创,创作不易,转载请标明出处! 一、QStackedWidget界面相关 1、布局介绍 QStackedWidget这个控件在界面布局时,使用还…

JVM整体分析篇

这里写目录标题JVM的组成部分1.类装载子系统1.1一个类加载到JVM的过程1.2类加载机制1.3为什么设计双亲委派机制1.4怎么打破双亲委派机制2.运行时数据区2.1线程私有及共享2.2JVM内存区结构2.3JVM参数设置经验3.Java对象的生命周期3.1.对象的创建3.2.对象大小的计算(6…

六、程序计数器(PC寄存器)

JVM中的程序计数寄存器(Program Counter Register)中,Register 的命名源于CPU的寄存器,寄存器存储指令相关的现场信息。CPU只有把数据装载到寄存器才能够运行。 这里,并非是广义上所指的物理寄存器,或许将其…

Python中实现将内容进行base64编码与解码

一、需求说明需要使用Python实现将内容转为base64编码,解码,方便后续的数据操作。二、base64简介Base64是一种二进制到文本的编码方式【是一种基于 64 个可打印字符来表示二进制数据的表示方法(由于 2^664,所以每 6 个比特为一个单…

PHP/7.2.11 缺少 apache2/logs/httpd.pid 文件

启动服务时:systemctl restart httpd.service,报错:● httpd.service - httpd serviceLoaded: loaded (/etc/systemd/system/httpd.service; enabled; vendor preset: disabled)Active: failed (Result: exit-code) since 五 2023-02-24 16:1…

Matlab进阶绘图第2期—线型热图

线型热图由共享X轴的多条渐变直线组成,其颜色表示某一特征值。 与传统热图相比,线型热图适应于X轴数据远多于Y轴(条数)的情况,可以很好地对不同组数据间的分布情况进行比较,也因此可以在一些期刊中看到它的…

IM即时通讯架构技术:可靠性、有序性、弱网优化等

消息的可靠性是IM系统的典型技术指标,对于用户来说,消息能不能被可靠送达(不丢消息),是使用这套IM的信任前提。 换句话说,如果这套IM系统不能保证不丢消息,那相当于发送的每一条消息都有被丢失的…

Unity 对接 ML-Agents 初探

一、ML-Agents 是什么 The Unity Machine Learning Agents Toolkit (ML-Agents) is an open-source project that enables games and simulations to serve as environments for training intelligent agents. We provide implementations (based on PyTorch) of state-of-the…

为什么很多人转行IT考虑后端开发Java?

顺应互联网时代发展的选择 在计算机广泛运用于社会的各个角落的今天,选择学习一门计算机语言真的很不错,它会让你的生活从此与众不同。软件渗透到组织的运营和管理的后台之中,形成了组织运营支撑平台。这种形态是传统软件的重要应用场景。在…

matlab simulink Buck三电平dcdc变换器

1、内容简介略653-可以交流、咨询、答疑2、内容说明三电平dc/dc变换器的发展是建立在三电平逆变器的基础上的,由于在三电平dc/dc变换器中每个开关管的电压应力是输入直流电压的一半,具有降低开关管电压应力、减小输入输出滤波器大小、减小储能电感和电容…

【Linux应用】进程间通信消息队列

1.前言 进程间通信简称IPC(Inter process communication),进程间通信就是在不同进程之间传播或交换信息。 消息队列是进程通信的一种方式,本质是一个存储消息的链表,这些消息具有特定的格式及特定优先级。消息队列是…

新建一个虚拟环境来管理自己的pytorch环境

python只是一个编程语言,在开发具体软件时,可能还需要使用到各种的包,比如著名的 numpy,torch 等等。如果我们自己来管理则显得非常麻烦,于是便有了Anaconda这样一个类似容器的东西,它封装了python各种各样…

Spring Cloud入门篇 Hello World | Spring Cloud 1

一、专栏说明 Spring Cloud是一系列框架的有序集合。它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如:服务发现/注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以用Spring Boot的开发风格做到一键启动和部署。 本文主要介绍Spring C…

功能测试三年,是应该改变了

前言 测试行业3年多经验,学历大专自考本科,主要测试方向web,PC端,wap站,小程序公众号都测试过,app也测过一些,C端B端都有,除功能外,接口性能也有涉猎,但是不…

JavaScript 两种方案打开文件对话框

JavaScript 两种方案打开文件对话框 文章目录JavaScript 两种方案打开文件对话框一、文件对话框二、传统方案表单元素🌈三、文件系统访问API💦四、更进一步使用六、代码仓库🌐七、参考资料💘七、推荐博文🍗一、文件对话…

ZYNQ双核处理器独立运行AMP

一、简介多核处理器从多核的结构上是否一致,分为两种基本架构:同构多核架构和异构多核架构。同构多核处理器是指系统中的处理器在结构上是相同的;而异构处理器是指系统中的处理器在结构上是不同的,这些处理器可以是通用处理器&…

MySQL递归查询 三种实现方式

1 建表脚本1.1 建表DROP TABLE IF EXISTS sys_region; CREATE TABLE sys_region (id int(50) NOT NULL AUTO_INCREMENT COMMENT 地区主键编号,name varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT 地区名称,short_name varchar(50) CHARA…

WebDAV之π-Disk派盘+Cloud Player

Cloud Player 支持WebDAV方式连接π-Disk派盘。 推荐一款云媒体播放器是存储在常见云平台中的内容的通用播放器。 Cloud Player云媒体播放器是存储在常见云平台中的内容的通用播放器,无需将其下载到设备。支持以下云平台:Google Drive、DropBox、One Drive、WebDav等。此外,…

BI解析,告诉你企业为什么选择商业智能BI?

数据的价值目前在商业世界和现代化城市建设中尤为突出,先说商业世界,数据在这里成为了各领域企业的重要资产,不仅让众多企业重新构建了以数据为企业文化、核心驱动力的数据体系,还把企业的财务、销售、运营、市场、研发等不同部门…