Katalon studio是一个支持关键字驱动的工具,所有的关键字都对应的打包在WebUI,Mobile和WebService包中(网上有篇文章介绍的不错可以参考一下:https://segmentfault.com/a/1190000015822828)
关键字驱动:
关键字驱动的来源非常自然,从面向对象的思路出发,同样的业务逻辑会自然的编写成一个类或者函数作为关键字来被不同的测试脚本所调用。当测试框架发展到所有的测试过程都已经可以被写好的函数和类所组合完成时,就进化到了关键字驱动的一个高级阶段,这个时候测试用例的开发就变成了测试数据和关键字的组合,并把这种组合工作简化为所有人都很熟悉的表格填写任务,从而最终达到一个由数据和关键字驱动整个测试的效果。
在关键字驱动框架里,你可以创建一些关键字以及相关联的一些方法和函数。然后你创建一个函数库,它里面包含一个读取关键字的逻辑,然后调用相关的动作。
不安装katalon客户端的话也可以在浏览器中直接装katalon的插件,然后在浏览器中运行:
下载的插件是crx结尾的,
chrome安装识别不到,就把后缀名改为zip,然后再解压
此时就能识别到了
- 创建测试用例
然后双击打开此用例。
本例中创建了一个Login的用例。
创建完用例后开始录制:输入要测试的地址后选择浏览器
登录系统后,想要停止录制,点击停止按钮。然后点击下方的OK即可生成测试用例。
页面中所有的元素都存在如下这个目录中:
由上面的录制过程可以看到登录的用户名密码已经固定了,那么想要测试多个账号密码呢
用例页面下方切换到变量那栏:
点击Add,添加变量,Name可以自定义
定义完变量之后回到用例页面
定义好变量之后,要批量引入数据文件的话就要用到Data Files
右键创建测试数据,可以选择这三种格式的数据,本文中演示Excel格式的,如下图,选择EXCEL即可导入数据。
excel中就下面这样写(表头就是之前定义的变量名)
创建完数据之后要想和用例关联起来,那么就需要用到Test Suites
创建完测试套件后点击Add添加测试用例
新建完测试套件后,点击展示下图所示。
之后点击Test Data中的Add
依次选择好:
这样,便绑定了测试数据。
然后点击运行即可。页面会根据数据文件中的三个账号依次做三次登录。
集成Jenkins以定时执行测试用例:
首先下载Jenkins,https://jenkins.io/zh/,然后启动.bat文件,启动jenkins,开始需要设置用户名密码之类。
然后选择第一个:
然后点击刚创建的项目名称进入该项目的详情页:
然后点击【配置】,进入配置页面:
这里主要配置下面几个地方:
1.构建触发器,就是设置需要定时执行的时间
2.构建环境中的设置,为了防止长期运行损坏文件夹,勾选第一项
3.最主要的,构建项目命令
关于命名每行的解释:
第一行切换到d盘
第二行切换到Katalon安装目录
第三行为准备工作时准备的命令行语句
关于报错:
一、不知为何,录制时正常,回放时就报错了
以为是jdk版本、Katalon版本的问题,可是试了各种版本都没有效果
关于环境,一边是win10系统jdk1.8可以回放;一边是win7系统,jdk之前是1.7可以回放,后面忽然就不能回放了,换了jdk1.8后还是如此,KA已经升级到了最新版本
二、
第一次执行的时候,用了谷歌启动,于是就报了这个错,居然 说没有安装浏览器……首先就否定了这个说法 ,可是网上又找不到类似的解决办法,
后来偶然瞥了一眼桌面上的谷歌图标 ,就这坑货,发现和谷歌长得不太像,才发现是极速浏览器,纠结了那么久的问题终于解决了
三、
报这个错的话,更换一下浏览器的驱动:驱动地址:D:\tool\Katalon\Katalon_Studio_Windows_64-5.3.1\configuration\resources\drivers
有时katalon出现问题可能就是驱动问题:
本机上katalon驱动地址,目录可参考: D:\tool\Katalon\Katalon_Studio_Windows_64-5.3.1\configuration\resources\drivers
katalon在测试接口时,关于body中的数据会乱码的情况,可以通过添加环境变量解决:变量名:JAVA_TOOL_OPTIONS,变量值:-Dfile.encoding=UTF-8
Katalon在使用的过程中总是遇到各种报错,这里记录一下:
2019.7.20今天下载了KS的最新版,是6.2.2发现居然浏览器都不能用了。。。
使用KS进行接口测试:
创建一个新的请求
输入接口名和地址,这里接口名只支持输入英文的,所有尽量把名字起得通俗易懂吧
下图response响应部分分别提供了三个信息:响应状态码、发送从请求开始的总时间,直到katalon studio收到响应的最后一个字节、响应包的大小
以上是冒烟测试步骤,接下来介绍创建接口测试用例
首先和UI用例一样创建一个用例,
然后点击添加接口关键字,
到这里就配置结束了,直接运行接口即可
接下来介绍对接口的一些校验操作:
目前只会用这个关键字,就是校验预期的文本是否出现在返回的结果中
首先在第一步发送请求后面的Output中定义一个变量,随意取个名字(直接输入即可)
之后运行,日志中就会提示是否验证成功了
下面介绍接口测试中如何把参数值做成变量,直接从数据库中查询
把接口中的参数做成变量:
然后点击下方菜单中的variables,设置变量:
然后测试套件中
选中需要数据的接口
选择数据即可
首先准备接口中的参数需要的数据:
关于获取接口返回的参数值:
情境:用用户名密码登录后,返回了sessionId,查询会员搜索的历史记录接口的入参需要用到sessionId
登录接口:
获取sessionId,需要在中的Verification中写代码,这里的思路是,先把sessionId获取出来,然后存入dataFiles中,然后别的需要用到的接口再从dataFiles中获取。
下面是验证代码:(关于groovy的基本用法可以参照“https://blog.csdn.net/zhaoyanjun6/article/details/70313790/”)
//验证响应是否正确 WS.verifyElementPropertyValue(response, 'message', "mess.default.success") def jsonSlurper = new JsonSlurper() //将结果转换为json def jsonResponse = jsonSlurper.parseText(response.getResponseText()) //获取json串中的sessionId值 def sessionId = jsonResponse.data.sessionId //将sessionId值存储到测试数据文件中 File file = new File("Data Files/sessionId/sessionId.csv"); BufferedWriter out = new BufferedWriter(new FileWriter(file)) out.write(sessionId) out.flush(); out.close(); WS.verifyElementPropertyValue(response,'message', 'mess.default.success') def jsonSlurper = new JsonSlurper()
其中数据文件的地址是需要自己在katalon目录中的Data Files中创建:
在sessionId中创建一个csv文件(空的即可)
之后在项目中的data files中创建一个sessionId的文件
下面是在sessionId中的设置:
接下来就那个需要用,从这里引用即可
关于以上代码中部分解释:在Groovy中支持动态类型,定义变量的时候可以不指定其类型,变量定义可以使用关键字def。
eg:
关于json转换:
以下是例子代码:
关于代码中的buffered的解释:
当要写文本文件时最好使用writer类,而不是直接写outputStream,因为writer类就是为写文本设计的
使用BufferedWriter写入文本时不用讲文本转换成字节数组。注意使用BufferedWriter一定要在finally中flush()并close().
bufferedreader:从字符输入流中读取文本,缓冲各个字符,从而实现字符、数组和行的高效读取;
bufferedwriter:将文本写入字符输出流,缓冲各个字符,从而提供单个字符、数组和字符串的高效写入;
对于输入输出流的理解是相对于程序本身而言的,将一个文件中的数据读取出来写入到程序里面,这样的是输入流,而将程序中的数据写入到一个文件中这样的是输出流,这个输入和输出可以理解为相对程序来说是输入还是输出来定义
当各个接口都需要用到同一个参数值时,就需要设置全变量了,下面介绍全局变量的用法:
1.在左侧菜单栏中,Profiles中可右键创建全局变量
创建窗口
创建结束
接下来就是如何在接口中引用全局变量:
在对象库中打开接口,打开variables窗口,设置变量
然后接口这里参数设置成变量:
这样全局变量就设好了
下面演示接口测试中,判断响应的属性不为空的验证语句
在对象库中的接口的验证片段中,加入验证语句如下:
- 导入groovy.json.JsonSlurper作为JsonSlurper
def jsonSlurper = new JsonSlurper()
def json = jsonSlurper.parseText(response.getResponseBodyContent())
WS.verifyNotEqual(json.field,null)
下面是一些在对象库中的验证片段:
//assert response.responseBodySize> 0 //assert response.getResponseText().value !=null //assert response.getResponseBodyContent().isEmpty(true) //检查响应主体是否包含某些字符串 //assertThat(response.getResponseText()).contains('mess.default.success') //检查响应的属性值不为空 def jsonSlurper = new JsonSlurper() def json = jsonSlurper.parseText(response.getBodyContent()) WS.verifyNotEqual(json.data, null)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!