php网站投票源码,邢台信息港欢迎您,大众的网站建设,电子商务网页设计与网站建设论文一、UI自动化测试用例剖析
让我们先从分析一端自动化测试案例的代码开始我们的旅程。以下是我之前写的一个自动化测试的小Demo。这个Demo基于Selenium与Java。 自动化测试小Demo
它要测试的东西其实是要看一下百度搜索能不能返回兴业银行的官网。我们分析一下这段代码都包含些…一、UI自动化测试用例剖析
让我们先从分析一端自动化测试案例的代码开始我们的旅程。以下是我之前写的一个自动化测试的小Demo。这个Demo基于Selenium与Java。 自动化测试小Demo
它要测试的东西其实是要看一下百度搜索能不能返回兴业银行的官网。我们分析一下这段代码都包含些什么东西。
第一这段代码包含了定位符。
熟悉Selenium的都知道inpubBox和searchButton就是网页的元素通过By.id实例化然后driver在findElement 的时候是通过他们的id就是”kw”和”su”找到他们的。所以”kw” 和”su”就是他们的定位符。 定位符
第二这段代码包含测试数据。
“兴业银行”“兴业银行欢迎您”就是测试要输入的数据。 测试数据
第三部分没前面两部分那么直观。
这段代码在基于”kw”找到inputBox后往里填入“兴业银行”四个字然后点击了searchButton提交搜索申请然后在搜索结果里面寻找“兴业银行欢迎您”的text然后以是否找到这个text作为assert的标准。这些测试步骤反映的是真实的业务逻辑 并且不能随意更换顺序。所以第三部分是业务逻辑。 业务逻辑
第四部分是业务逻辑里面的每一个步骤的具体操作
例如输入某段文字或者点击一个按钮等。具体到我们的例子就是sendKeys和click。 具体操作
第五部分就是如果把前面四部分都抽出去后测试代码剩下的东西
基本上就是一些负责准备或者是清理的代码例如初始化driver等。我把它称为代码骨架。
经上分析一个自动化测试用例由五部分组成定位符、测试数据、业务逻辑、具体操作、代码骨架。 UI自动化测试结构
二、数据驱动的自动化测试
如果把测试数据抽取出去通过数据的改变驱动自动化测试的执行最终引起测试结果的改变就是数据驱动的自动化测试。说白了就是测试数据参数化。 数据驱动
数据驱动的自动化测试适合测试场景与业务逻辑相对简单变化不是特别大但是测试数据对测试结果影响大的情景或者是需要通过大量不同的测试数据对相同的测试场景展开测试的情景。它实现的方式比较简单但由于业务逻辑还是镶嵌于测试代码里面的业务逻辑与测试代码还是强耦合的一旦业务场景发生改变需要修改测试代码来适应业务的变化。
想要隔离业务对测试代码的影响就必须使用关键字驱动的方法。
三、关键字驱动的自动化测试
简单来说关键字驱动的自动化测试就是在数据驱动的基础上把具体操作抽取到代码以外通过具体操作的改变来驱动测试的执行。
这里的说的关键字其实就是具体的操作例如例子里面的sendKeys和click。但由于具体操作关键字是基于业务逻辑的要想把关键字抽取业务逻辑也得一同抽取才能实现真正的关键字驱动。同时具体操作的对象是定位符定位的元素所以定位符也必须得一同抽取出代码意外才能完全隔离业务对代码的影响。 关键字驱动
基于关键字驱动的自动化测试适合业务场景复杂测试步骤繁多的情景又或者是希望搭建统一测试平台的情景。它最大的优点是使不懂编程的业务人员可以在不需要读懂代码的情况下通过更改配置自由添加新的测试用例或修改现有的测试用例。这一点在敏捷开发里面相当实用可以把业务卷入到测试当中让测试用例的准备工作尽可能提前另外测试代码与要测试的业务逻辑完全隔离同一份测试代码可以复用于不同的测试场景较少了重复开发的成本。但是它也不是完全没有缺点。
首先并不是所有场景都需要基于关键字驱动的有些场景数据驱动的方法能解决的话就应该果断选用数据驱动而不应该过度设计
第二由于业务逻辑与代码隔离了代码的可读性将大大降低单纯的代码基本没有业务含义要想通过读测试代码来了解业务基本是不可能了。牺牲了代码的可读性来换取可重用性。
第三由于代码复用了每一个测试用例的执行都相当于一次全新的测试这意味着如果不加额外处理测试报告将被互相覆盖永远都只保留最后一个测试用例的执行结果。
四、关键字驱动的自动化测试例子
这是我很早之前写的一个关键字驱动的自动化测试的Demo。基本的想法是把定位符、测试数据、业务逻辑、具体操作多抽取到一个叫做testCase.properties的文件。
Parameter用于存贮从testCase.properties读出来的属性主测试类TestBankIndex通过读取这个文件来驱动测试的执行。关键字所对应的具体操作放在了PageAction里面。
在testCase.Properties里面通过testCaseNameList来定义测试用例名字中间用|分割开。testCaseNameList以下是每一个测试用例的具体测试步骤。每个测试步骤名字以测试用例名字作为前缀并且其排列顺序就是测试步骤的顺序。然后测试步骤的值以测试所需的操作关键字、定位方式、定位表达式、测试数据、超时时间排列得来中间以|分割。这里有一个比较特别的是断言。如果是断言的话会有Keyword用于断言的判断。 testCase.Properties
Parameter用于存储testCase.Properties的属性
它其实只是一个简单的Java Bean。 Parameter
PageAction用于定义每个关键字对应的具体操作。
我们以search方法为例通过传入Parameter来获取search需要的元素定位于要输入的搜索文本然后执行真正的搜索操作并等待特定的时间。 PageAction
TestBankIndex是主测试类
但实际上里面就一个testEachCase方法。里面大量使用Java 反射机制来实例化和执行方法。所以testEachCase在执行的时候它不到最后一刻都不知道它要运行哪个测试用例与执行什么操作的这些完全在testCase.properties里面定义。 TestBankIndex
基本上就是这样。代码没时间优化很多地方都写的不是很规范也没有单元测试测试报告覆盖的问题也没有处理testCase.properties过于重量级了什么都往里塞。还没有UI不方面操作。但作为一个MVP基本上实现了UI自动化测试框架所需要的功能。
最后感谢每一个认真阅读我文章的人礼尚往来总是要有的虽然不是什么很值钱的东西如果你用得到的话可以直接拿走【文末领取】 【下面是我整理的2023年最全的软件测试工程师学习知识架构体系图全套资料】 一、Python编程入门到精通
二、接口自动化项目实战 三、Web自动化项目实战
四、App自动化项目实战 五、一线大厂简历
六、测试开发DevOps体系 七、常用自动化测试工具
八、JMeter性能测试 九、总结文末尾部小惊喜
生命不息奋斗不止。每一份努力都不会被辜负只要坚持不懈终究会有回报。珍惜时间追求梦想。不忘初心砥砺前行。你的未来由你掌握
生命短暂时间宝贵我们无法预知未来会发生什么但我们可以掌握当下。珍惜每一天努力奋斗让自己变得更加强大和优秀。坚定信念执着追求成功终将属于你
只有不断地挑战自己才能不断地超越自己。坚持追求梦想勇敢前行你就会发现奋斗的过程是如此美好而值得。相信自己你一定可以做到