用户关键字
1.应该容易理解,和工作流测试具有相同的规则。
2.不同的抽象级别。
3.可以包含一些编程逻辑(比如循环,if/else等等)
· 尤其是在一些低级的关键字种。
· 复杂的逻辑一般在测试库种而不是在用户关键字中。
变量
1.封装一些长的或者复杂的值。
2.在关键字之间传递信息。
变量的命名
· 名字明确但不要太长。
· 可以对变量进行注释。
· 使用一致的大小写规范:
1)在一个确定的范围内部对局部变量使用小写。
2)其它情况使用大写(全局,套件或测试用例级别的变量)。
3)空格和下划线都可以作为单词分隔符。
· 推荐在变量表中也要列出那些会动态设置的变量:
1)使用内置的关键字Set Global Variable,Set Suite Variable等对变量动态设置值。
2)初始值应该解释真正的值在哪里/如何设置。
样例:
*** Settings *** Suite Setup Set Active User *** Variables *** # Default system address. Override when tested agains other instances. ${SERVER URL} http://sre-12.example.com/ ${USER} Actual value set dynamically at suite setup *** Keywords *** Set Active User ${USER} = Get Current User ${SERVER URL} Set Suite Variable ${USER} |
传参和返回值
1.常的做法是从关键字中返回值,再将它们赋值给其它变量,然后将它们作为实参传给其它关键字。
2.另一种方法是将信息存在一个测试库中,或者使用内置的Set Test Variable关键字。
· 避免在测试用例级别使用编程风格。
· 使用此方法可能会更复杂,并使得可复用关键字变得困难。
好的例子:
*** Test Cases *** Withdraw From Account Withdraw From Account $50 Withdraw Should Have Succeeded *** Keywords *** Withdraw From Account [Arguments] ${amount} ${STATUS} = Withdraw From User Account ${USER} ${amount} Set Test Variable ${STATUS} Withdraw Should Have Succeeded Should Be Equal ${STATUS} SUCCESS |
不是很好的例子:
*** Test Cases *** Withdraw From Account ${status} = Withdraw From Account $50 Withdraw Should Have Succeeded ${status} *** Keywords *** Withdraw From Account [Arguments] ${amount} ${status} = Withdraw From User Account ${USER} ${amount} [Return] ${status} Withdraw Should Have Succeeded [Arguments] ${status} Should Be Equal ${status} SUCCESS |
避免使用Sleep关键字
1.同步测试时,Sleep是一种非常不稳定的方式。
2.安全边际会使得平均Sleep时间太长。
3.使用那些具有轮询确定操作发生的关键字代替Sleep关键字:
· 关键字名称通常以Wait开头
· 应该设置一个等待的最大时间
· 内置的关键字Wait Unitl Keyword Succeeds内部可能封装了其它关键字
4.有时Sleep是最简单的解决方案:
· 总是要小心使用
· 不要在用户关键字中使用,因为它们可能被其它测试或关键字使用。
· 在调试时阻止执行可能很有用。
以上翻译自https://github.com/robotframework/HowToWriteGoodTestCases/blob/master/HowToWriteGoodTestCases.rst
我们AT中的一些约定
我们项目现在做的是接口测试,比如对api/user/mobileregister接口进行测试。
测试套件的命名:TC_接口类名_方法名,比如上面的接口对应的套件名称是TC_User_MobileRegister。其中TC是TestCase的缩写,本该是TS【TestSuite】的,但一直这样用了,姑且就这样用吧。User是上面的接口所对应的类型,MobileRegister是该类中方法名,注意都是单词首字母大写。对一个接口的测试必须都写在一个测试套件中。
测试用例的命名:没有强制要求,如果说有,就是名字要明确、有序
比如,下面这个创建购买订单时的测试用例。明确体现在每个case名称后面都有简短的关键汉字说明;有序体现在有数字编号。还有一点是,如果有多个单词,单词之间没有分隔符,并且单词首字母大写。
变量的命名:
全局变量都定义在Common文件夹下的variables.txt文件中,见下图。规则是必须以G_开头,单词首字母大写,只有一个单词的话全部大写也可以。比如${G_Server}或${G_SERVER}都可以,但有两个及以上单词时建议使用${G_ServerUrl}(这里还有几个之前没遵守的变量还没改)。
套件范围的变量命名建议单词之间以下划线分隔。比如${user_name},${user_Name}都可以。
测试用例中的变量和关键字中的变量建议使用首个单词首字母小写,比如${userName},${tradePwd}等等。
注意:robot framework IDE中,如果一个关键字定义的形式参数包含${userName},但在测试用例中包含了一个从服务端返回的UserName字段,你将返回的值放到了${user_name}或${User_Name},验证期望的${userName}和返回的值是否相等时,RF会将这两个肉眼看着不同的变量当作同一个变量对待,所以必须明确区分这两个要比较的变量。比如,将返回的值存在变量${res_userName}中。
关键字的命名:
目前项目中有两种用户关键字,一种是在Common文件夹下的resource.txt中的关键字,一种是每个测试套件中定义的关键字。
resource.txt文件中的关键字是经常使用的一些关键字,命名规范是每个单词首字母大写,区别于系统关键字。虽然字体颜色本身有所区分了,但是形式上再有所区分不是更明显了吗,而且颜色可以随意设置的。见下图。
每个测试套件中定义的关键字是只在该测试套件中使用关键字,命名规范是单词之间以下划线分隔,分割线之间的单词或词组都是首字母小写。见下图。
本文内容不用于商业目的,如涉及知识产权问题,请权利人联系51Testing小编(021-64471599-8017),我们将立即处理