PHP接口自动化测试框架实现
我们来看一个简单的PHP实现的超简单的接口。
...//报名验证
private function apply_verify() {$raid = $this->input->get_post('raid');$mid = $this->input->get_post('mid');if (!$raid || !$mid) {$this->ret_json(10021, '参数错误');}$this->load->model('enlist_model');$result = $this->enlist_model->get_enlist_by_raid_mid($raid, $mid, true);if (!empty($result)) {$this->ret_json(10101, '你已经报过名');}
}
说明:
- 首先,它是一个POST接口。它需要两个参数:raid 和 mid。
- 然后,判断raid 和 mid 是否为空,为空返回:参数错误。
- 最后,调用 enlist_model 模型,通过
get_enlist_by_raid_mid方法查询是否为空,如果不为空返回:你已经报过名了。
接下来要做的事情不是写用例,而是构造一条已经报名的数据。
创建 xx_enlist_test_data.php 文件
array('table_name'=>'xx_enlist','data'=>array(array('eid'=>1,'raid'=>99,'mid'=>150,'phone'=>'01234567890'),)
)
当自动化在执行之前,会先到数据库的 xx_enlist 表插入这条数据,为什么要初始化数据?当然是为了保证接口测试用例的稳定性。比如,我在调用接口时,传入 raid=99, mid=150。如果数据库是表空的?那么,用例肯定失败了!如何保证这条用每次运行 100% 成功呢?当然是每次执行之前再对应的表中初始化这么一条数据了!
定义的数据怎么插入到数据库中,当然是有一层解析的,将上面的数据库转成一条SQL语句执行。上面的数据当然比原生的一条插入SQL语句好写。
最后,才是开始写用例。创建interface_enlist_test.php测试文件。
class Interface_enlist_test extends InterfaceTestCase
{//初始化数据public function db_fixtures(){return array(array('data_file' => 'xx_enlist_test_data.php','truncate' => true),);}/** 报名验证* raid不传*/public function test_post_enlist_raid_null(){$result = $this -> request('enlist/apply_verify',array(),array('mid'=>150));$this->assertEquals($result['status'],'10021');$this->assertEquals($result['message'],"参数错误");}/** 报名验证* mid不传*/public function test_post_enlist_mid_null(){$result = $this -> request('enlist/apply_verify',array(),array('raid'=>99));$this->assertEquals($result['status'],'10021');$this->assertEquals($result['message'],"参数错误");}/** 报名验证* 用户已报名*/public function test_post_enlist_verify_success(){$result = $this -> request('enlist/apply_verify',array(),array('raid'=>99, 'mid'=>150));$this->assertEquals($result['status'],'10101');$this->assertEquals($result['message'],"你已经报过名");}
}
这里的用例我就做过多解释了。调用接口写断言。
答疑环节
我知道你们大概会有哪些疑问,接下来,我将试着解答这些疑问。
1、我怎么知道接口调用了哪些表?
首先你要懂PHP编程,然后熟悉Web开发框架,申请代码查看权限,阅读接口处理逻辑,自然就知道接口调用哪些表。
2、看不懂开发代码怎么办?
学呗!我当年也不是一下子就看懂PHP代码的,前后也学了两三个月。
3、往数据库里面插入测试数据,有重复的怎么办?
我们当时的设计是,框架在运行时会自动化的修改被测试的接口项目将数据库指到我本地,也就是说我本地有一个跟测试环境一模一样的数据库,每次在插入数据之前先清空表。
要保证本地数据库的表结构和测试环境是一样的。这其实也不难,开发如果改到表会上传SQL脚本,我只需要在本地数据库执行一下就行了。
4、这样做接口测试有什么好处?
- 首先,接口用例超级稳定,稳定是自动化测试的 大敌 ,做过自动化的同学知道我在说什么。在保证数据的基础上,如果用例失败了, 100% 是接口逻辑被改动到了。
- 不依赖接口文档,有几个公司的接口文档是非常详细,且及时维护的?我这种方式不需要接口文档。
- 不
盲测,盲测就是把接口的参数,每个类型试一遍,然后再排列组合,如果你不知道接口要调用哪个表的哪个字段来判断条件,那么这种盲测依然覆盖不到接口的所有处理逻辑。- 当然更装X(玩笑~!),实际情况是你测试接口的水平即全面又深入,比只会用 postman 盲测的同学厉害多了。
- 反向促进接口代码质量,因为的接口用例编写是基于阅读接口代码的,有一个新来的PHP开发被我叫到面前几次,并直接指出对方的代码逻辑错误之后(分分钟教他怎么做开发,哈哈!),它的接口提测质量一下子提高了许多。
5、这样做接口测试的缺点是什么?
- 不适合所有团队,不是每个测试都懂开发代码的,比如,我们现在的接口用GO,如果我现在想达到无障碍阅读GO接口代码,也需要较高的学习成本。
- 不适合大型项目,我之前之所以可在这么玩,主要也是因为PHP项目不大,如果是一个大型项目的话就不适合了,在微服务的架构下,你甚至很难理清一个接口的调用关系。
不过,我仍然认为这是一个优秀的接口测试工程师应该努力的方法。接口测试平台解决的只是测试效率问题,如何把一个接口测好?当然是理解好需求,并有能力阅读接口处理逻辑,设计出有效和全面的接口用例。
相关文章:
PHP接口自动化测试框架实现
我们来看一个简单的PHP实现的超简单的接口。 ...//报名验证 private function apply_verify() {$raid $this->input->get_post(raid);$mid $this->input->get_post(mid);if (!$raid || !$mid) {$this->ret_json(10021, 参数错误);}$this->load->model(…...
VLAN原理+配置
目录 一, 以太网二层交换机 二,三层架构: 三,VLAN配置思路 1.创建vlan 2.接口划入vlan 3.trunk干道 4.vlan间路由器 5.DHCP池塘配置 四,华为VLAN部分的接口模式讲解: 五,华为VLAN部分的…...
MongoDB文档-基础使用-在客户端(dos窗口)/可视化工具中使用MongoDB基础语句
阿丹: 本文章将描述以及研究mongodb在客户端的基础应用以及在spring-boot中整合使用mongodb来完成基本的数据增删改查。 先放官方的文章 MongoDB CRUD操作 - MongoDB-CN-Manual 本文章分为: 在客户端(dos窗口)/可视化工具中使用…...
“RISC-V成长日记” blog发布,第一个运行在RISC-V服务器上的blog?
尽管推特、公众号、微博、抖音等社交平台风靡一时,但blog(博客)在全世界依然经久不衰,尤其是在技术领域。对于博主而言,博客是他们独立创作的天地,可以随时更新内容和故事,确保素材的时效性。此…...
gitlab配置webhook
一.前言 当需要做jenkins的自动化触发构建时,就需要配置gitlab的webhook功能,以下来展示以下如何配置gitlab的webhook,jenkins的配置就不在这里展示了,可以去看我devops文章的完整配置 二.配置 在新版本的gitlab中,…...
编译安装Linux内核实践与踩坑
编译安装Linux内核实践与踩坑 1. 参考方案 先留个坑 1. 参考方案 编译安装linux内核ShawnZhong的仓库make mrproper make oldconfig scripts/config --set-str SYSTEM_TRUSTED_KEYS "" KBUILD_BUILD_TIMESTAMP make CC"ccache gcc" -jnproc LOCALVERSION-…...
郑州https数字证书
很多注重隐私的网站都注重网站信息的安全,比如购物网站就需要对客户的账户信息以及支付信息进行安全保护,否则信息泄露,客户与网站都有损失,网站也会因此流失大量客户。而网站使用https证书为客户端与服务器之间传输的信息加了一个…...
第125天:内网安全-隧道技术SMBICMP正反向连接防火墙出入规则上线
知识点 #知识点: 1、入站规则不出网上线方案 2、出站规则不出网上线方案 3、规则-隧道技术-SMB&ICMP-隧道技术:解决不出网协议上线的问题(利用出网协议进行封装出网) -代理技术:解决网络通讯不通的问题࿰…...
性能测试怎么做?测试工具怎么选择?
在当前软件测试行业,熟练掌握性能测试已经是测试工程师们面试的敲门砖了,当然还有很多测试朋友们每天的工作更多的是点点点,性能方面可能也只是做过简单的并发测试,对于编写脚本,搭建环境方面也比较陌生。今天这篇文章…...
【Eclise配置Jdk环境】Jre环境常见配置错误问题
1、问题描述:执行Run As → Maven install 报出以下错误。 [INFO] Scanning for projects... [INFO] [INFO] -------------------------< com.example:gobang >------------------------- [INFO] Building gobang 0.0.1-SNAPSHOT [INFO] -------------------…...
UM2080F32——32位SoC芯片
UM2080F32是基于ARM Cortex-M0内核的超低功耗、高性能的、单片集成(G)FSK/OOK无线收发机的32位SoC芯片。工作于200MHz~960MHz范围内,支持灵活可设的数据包格式,支持自动应答和自动重发功能,支持跳频操作,支持FEC功能,同…...
IDEA基础使用
IDEA基础使用 1、IDEA中显示用法和用户截图展示有调用显示无调用显示 对应方法 2、如何找出项目中所有不被调用方法截图展示对应方法 3、常用代码(Code)说明及快捷键:4、未完待续待日后更新。。。总结:欢迎指导,也祝码友们代码越来越棒,技术越…...
[数据集][目标检测]遛狗不牵绳数据集VOC格式-1980张
数据集格式:Pascal VOC格式(不包含分割路径的txt文件和yolo格式的txt文件,仅仅包含jpg图片和对应的xml) 图片数量(jpg文件个数):1980 标注数量(xml文件个数):1980 标注类别数:5 标注类别名称:["dog","p…...
基于WebRTC升级的低延时直播
快直播-基于WebRTC升级的低延时直播-腾讯云开发者社区-腾讯云 标准WebRTC支持的音视频编码格式已经无法满足国内直播行业需求。标准WebRTC支持的视频编码格式是VP8/VP9和H.264,音频编码格式是Opus,而国内推流的音视频格式基本上是H.264/H.265AAC的形式。…...
数学知识(二)
一、裴蜀定理 对于任意整数a,b,一定存在非零整数x,y,使得 ax by gcd(a,b) #include<iostream> #include<algorithm>using namespace std;int exgcd(int a,int b,int &x,int &y) {if(!b){x 1,y 0;return a;}int d exgcd(b,a %…...
Java实现数据库表中的七种连接【Mysql】
Java实现数据库表中的七种连接【Mysql】 前言版权推荐Java实现数据库表中的七种连接左外连接右外连接其他连接 附录七种连接SQL测试Java测试转换方法类 Cla1类 Cla2类Cla3 最后 前言 2023-8-4 16:51:42 以下内容源自《【Mysql】》 仅供学习交流使用 版权 禁止其他平台发布时…...
452. 用最少数量的箭引爆气球
452. 用最少数量的箭引爆气球452. 用最少数量的箭引爆气球 有一些球形气球贴在一堵用 XY 平面表示的墙面上。墙面上的气球记录在整数数组 points ,其中points[i] [xstart, xend] 表示水平直径在 xstart 和 xend之间的气球。你不知道气球的确切 y 坐标。 一支弓箭可…...
HTML <rp> 标签
实例 一个 ruby 注释: <ruby> 漢 <rt><rp>(</rp>ㄏㄢˋ<rp>)</rp></rt> </ruby>浏览器支持 元素ChromeIEFirefoxSafariOpera<rp>5.05.538.05.015.0 Internet Explorer 9, Firefox, Opera, Chrome 以及 S…...
常见的设计模式(超详细)
文章目录 单例模式饿汉式单例模式懒汉式单例模式双重检索单例模式 工厂模式简单工厂模式工厂(方法)模式抽象工厂模式 原型模式代理模式 单例模式 确保一个类只有一个实例,并且自行实例化并向整个系统提供这个实例。 饿汉式单例模式 饿汉式单…...
Excel 超牛的格式调整汇总——你还在担心你做出来的表不好看吗
Excel格式调整技巧 绘图逆序绘制条形图设置条形图宽度 条件格式透视表上的条件格式 数字格式千分位逗号数字同时显示 K M 数据分列非重复计数区域透视图新增计算列隐藏行列快捷键其他小技巧 绘图 逆序绘制条形图 设置条形图宽度 条件格式 透视表上的条件格式 条件格式随切片…...
【Linux】shell脚本忽略错误继续执行
在 shell 脚本中,可以使用 set -e 命令来设置脚本在遇到错误时退出执行。如果你希望脚本忽略错误并继续执行,可以在脚本开头添加 set e 命令来取消该设置。 举例1 #!/bin/bash# 取消 set -e 的设置 set e# 执行命令,并忽略错误 rm somefile…...
MySQL 隔离级别:脏读、幻读及不可重复读的原理与示例
一、MySQL 隔离级别 MySQL 提供了四种隔离级别,用于控制事务之间的并发访问以及数据的可见性,不同隔离级别对脏读、幻读、不可重复读这几种并发数据问题有着不同的处理方式,具体如下: 隔离级别脏读不可重复读幻读性能特点及锁机制读未提交(READ UNCOMMITTED)允许出现允许…...
.Net框架,除了EF还有很多很多......
文章目录 1. 引言2. Dapper2.1 概述与设计原理2.2 核心功能与代码示例基本查询多映射查询存储过程调用 2.3 性能优化原理2.4 适用场景 3. NHibernate3.1 概述与架构设计3.2 映射配置示例Fluent映射XML映射 3.3 查询示例HQL查询Criteria APILINQ提供程序 3.4 高级特性3.5 适用场…...
Rapidio门铃消息FIFO溢出机制
关于RapidIO门铃消息FIFO的溢出机制及其与中断抖动的关系,以下是深入解析: 门铃FIFO溢出的本质 在RapidIO系统中,门铃消息FIFO是硬件控制器内部的缓冲区,用于临时存储接收到的门铃消息(Doorbell Message)。…...
均衡后的SNRSINR
本文主要摘自参考文献中的前两篇,相关文献中经常会出现MIMO检测后的SINR不过一直没有找到相关数学推到过程,其中文献[1]中给出了相关原理在此仅做记录。 1. 系统模型 复信道模型 n t n_t nt 根发送天线, n r n_r nr 根接收天线的 MIMO 系…...
安卓基础(aar)
重新设置java21的环境,临时设置 $env:JAVA_HOME "D:\Android Studio\jbr" 查看当前环境变量 JAVA_HOME 的值 echo $env:JAVA_HOME 构建ARR文件 ./gradlew :private-lib:assembleRelease 目录是这样的: MyApp/ ├── app/ …...
蓝桥杯 冶炼金属
原题目链接 🔧 冶炼金属转换率推测题解 📜 原题描述 小蓝有一个神奇的炉子用于将普通金属 O O O 冶炼成为一种特殊金属 X X X。这个炉子有一个属性叫转换率 V V V,是一个正整数,表示每 V V V 个普通金属 O O O 可以冶炼出 …...
人机融合智能 | “人智交互”跨学科新领域
本文系统地提出基于“以人为中心AI(HCAI)”理念的人-人工智能交互(人智交互)这一跨学科新领域及框架,定义人智交互领域的理念、基本理论和关键问题、方法、开发流程和参与团队等,阐述提出人智交互新领域的意义。然后,提出人智交互研究的三种新范式取向以及它们的意义。最后,总结…...
C语言中提供的第三方库之哈希表实现
一. 简介 前面一篇文章简单学习了C语言中第三方库(uthash库)提供对哈希表的操作,文章如下: C语言中提供的第三方库uthash常用接口-CSDN博客 本文简单学习一下第三方库 uthash库对哈希表的操作。 二. uthash库哈希表操作示例 u…...
根目录0xa0属性对应的Ntfs!_SCB中的FileObject是什么时候被建立的----NTFS源代码分析--重要
根目录0xa0属性对应的Ntfs!_SCB中的FileObject是什么时候被建立的 第一部分: 0: kd> g Breakpoint 9 hit Ntfs!ReadIndexBuffer: f7173886 55 push ebp 0: kd> kc # 00 Ntfs!ReadIndexBuffer 01 Ntfs!FindFirstIndexEntry 02 Ntfs!NtfsUpda…...
