1 Katalon基本介绍
Katalon可以作为API自动化和UI自动化工具,当前我的应用方向是UI自动化,后续也基于此介绍该工具;
由于Katalon软件从2020/04/30开始不支持<7.0版本的激活,导致当前新的机器无法使用<7.0版本的软件(之前用过的机器还能使用),同时从7.0版本开始 不免费 支持命令行模式(无法持续集成),所以为了能够继续使用当前的版本(6.3.4)。而当前已知的问题是Katalon打开后在Preferences中没有Katalon选项。对临时使用影响不大。
Katalon Studio下载
本人用的版本是6.3.4,下载地址
https://github.com/katalon-studio/katalon-studio/releases?after=v6.3.4.rc2
2 基础配置
Web driver
本人用的是Chrome浏览器,关于web driver的说明,都是基于Chrome;
如果Chrome版本和Katalon自带的Chromedriver版本不一致,Katalon提示无法打开浏览器,提示版本不正确;
手动更新
第一步、查看本地浏览器版本;
第二步、到Chromediver镜像,下载chrome版本对应的chromedriver.exe文件;
第三步、然后找到katalon如下所示文件夹中,替换chromedriver.exe重新启动katalon即可。
D:\Katalon_Studio_Windows_64-6.3.4\configuration\resources\drivers\chromedriver_win32
建议:关掉Chrome自动更新,防止浏览器频繁更新后,Chromedriver版本和浏览器版本不一致出现无法打开的问题。
自动更新
号称可以自动更新,当前尝试失败,后续看看
3 Katalon Tests Explorer 视图
Group | 功能 |
---|---|
Test Cases | 列出当前项目中的所有测试用例 |
Object Repository | 列出当前项目的所有测试对象 |
Test Suites | 列出当前项目的所有测试套件和测试套件集合 |
Data Files | 列出当前项目的所有测试数据 |
Checkpoints | 列出当前项目的所有检查点 |
Keywords | 列出当前项目的所有自定义关键字 |
Test Listeners | 列出当前项目的所有测试监听器 |
Reports | 列出当前项目的所有生成报告 |
Profiles | 列出当前项目的所有执行概要 |
Include | 包含Cucumber特性文件和步骤定义 |
1. Profiles
在Katalon Studio左侧菜单栏中,第一项就是全局变量,默认的一个文件名叫default。双击打开,可以在里面添加全局变量,依次填入变量名、变量类型、变量值、描述即可。如图我们加了一个字符串型的用户名变量。右击变量选择Show reference,还可以查看都有哪些脚本引用了该变量。
3. Object Repository
元素仓库
6. Test Listeners
Test Listeners有点像去其他测试框架(Nunit/Junit等)中像set up/tear down这样的全局执行函数。
Test Listeners提供了Before Test Case、After Test Case、Before Test Suite Case和After Test Suite Case这四个方法,看名字就知道是干嘛的了,你可以做一些全局的操作(比如每次开始执行用例前初始化一些数据、配置等;又或者在用例执行之后,将测试数据进行清理等工作),根据实际需求添加相应的代码即可:
4 测试执行流程
Katalon中套件、用例等等的执行顺序:
5 关键字
https://www.testclass.cn/katalon_studio_new_keywords.html
调用测试用例Call Test Case
https://blog.csdn.net/qq_18659137/article/details/85805199
验证用例正确性
Verify系列与assert区别:Verify可以按你的设置来控制脚本是否报错停止或继续执行,assert会停止脚本
FAQ
1. waitForElementVisible、 waitForElementPresent、waitForElementClickable三者之间的关系和区别?
waitForElementVisible = WaitForElementPresent + Visible
waitForElementVisble = WaitForElementPresent + Clickable
Present和Visible的区别:
presence_of_element_located 元素存在DOM树中,但是没有显示出来,比如用visibility:hidden代表元素存在DOM树中,但是不可见。 但是display:none,代表元素已经从DOM树中摘除了,不会在DOM树中给它留位置。 waitForElementPresent都为true.
visibility_of_element_located 元素不仅要存在DOM树中,而且要显示出来。
display:none —不为被隐藏的对象保留其物理空间,即该对象在页面上彻底消失,通俗来说就是看不见也摸不到。
visible:hidden — 使对象在网页上不可见,但该对象在网页上所占的空间没有改变,通俗来说就是看不见但摸得到。
2. waitForXXX 和 verifyXXX 两类关键字的区别?
waitForXXX 关键字支持timeout参数,该API会在超时时间范围内循环进行判断,直到超时。 超时之后会出现WARNNING消息,但是不会抛出任何Exception,所以不会使测试用例失败。
verifyXXX关键字大部分不支持timeout参数,即只判断一次,而且如果判断失败,则会抛出exception,所以会使得测试用例失败。
3. waitForXX 和 verifyXXX 分别适用什么样的场景?
waitForXX可以看作是智能版的Delay操作(while + delay操作),waitForXX会在条件满足后即继续后续操作而不会持续等待到超时时间,而Delay会一直等到指定时间为止。
平时用例需要的场景是希望使用waitForXXX,然后超时则抛出exception. 以上两类API均不能满足此类需求。
对于这类场景,有以下两种方式:
搭配使用这两类API来达到以上效果,即通过waitForXXX来等待条件满足,如果条件不满足,则通过verifyXX来判断同时抛出Exception.
调用waitForXXX函数然后获取返回值,如果返回值不为True,则抛出Exception.、
4. waitForElementNotXXX类方法有什么注意的么?
当元素不存在的时候,waitForElementNotVisible会报exception. 如果元素最后会从HTML中去掉,则建议使用notpresent,而不是直接用notvisible. NotVisible = Present + not visible.
同上,waitForElementNotClickable也要慎用。 NotClickable = Present + not clickable.
综上所述,如果控件最后只是隐藏或者不可点,而不是从HTML中去掉,则可以用notvisible或者notclickable. 否则请使用notpresent.
其他
1. 某些点击操作可能会受到页面加载速度影响,点击操作运行了,但是没有实现真正的点击操作,如何规避这类情况?
通过调用自定义的关键字tryClick函数,可以实现多次点击,如果点击的时候出现Exception.则不会抛出,继续点击(通过参数指定最大点击数),直到没有Exception抛出。 —此类方法适用于点击时可能会出现exception的情况。
使用自定义的clickAndWaitXXX类函数来替代click函数。 waitXXX类似waitForXXX类API. 给定一个判断条件(如判断点击后期望的控件是否出现),如果判断条件为真(点击成功了),则不继续点击,继续后续操作,否则继续多次点击(通过参数指定点击最大次数),多次点击后任没有满足指定条件,则抛出exception,测试用例直接失败。 ----此类方法适用于click不出现exception而且有比较稳定的判断条件的情况。
在click之前等待一段时间(Delay). ----不推荐使用,适用于稳定的需要等待一定时长的场景。
2. 某些输入框类的提示信息,用例运行失败,且日志总是提示信息不存在,但是错误截图中错误提示信息是有的。
初步判断是由于在操作和判断提示信息之间需要有一定的时间差,测试用例中前后操作太快,导致页面中的提示信息还没有出现就开始判断,所以会报错(类似问题2,verifyXX没有timeout参数,只是一次性操作)。两种解决方案:
waitForXX 和 verifyXX配合使用。
操作之后等待一段时间再判断提示信息。
3. 运行测试用例失败后(测试套件),确定是测试用例问题,如何根据测试报告来进一步改进用例?
在当前环境上再次运行测试用例,确定是否是由于前端代码变更导致用例中的控件无法通过已有的条件进行定位。 如果是前端代码的修改,则需要同步修改测试用例。
如果测试用例不稳定问题,则可以通过报告中的截图定位错误的大概位置。 通过运行测试用例重现问题(很多问题是偶现的不稳定问题,所以可以在suite将用例重复运行,或者手动多次运行用例),然后可以人为观看用例的运行过程,找到不稳定点,根据具体的情况修改对应代码,提升用例的稳定性(具体的改进方法请参照上述FAQ或者求助组内其它人员)。
4. 环状的图像控件如何点击?
由于底层的实现终究是通过控件所在窗口的位置计算出其中心位置,然后点击其中心位置来实现的。所以对于环形的控件,如果还是直接使用click函数的话,会点击中间的空心位置,这时控件是无法被点击到的。 这种情况可以使用clickOffset方法,offsetX和offsetY两个参数分别为相对于控件左上角位置的偏移量。 如果屏幕分辨率一直不变,则可以通过手动计算写一个绝对值,否则可以通过getWidth和getHeight获取元素的大小,通过计算可点击位置的相对位置百分比来计算偏移量。