• RFS的web自动化验收测试——第14讲 万能的evaluate


    引言:什么是RFS——RobotFramework+Selenium2library,本系列主要介绍web自动化验收测试方面。

    ( @齐涛-道长 新浪微博)

     

    这一讲我们重点来介绍一下一个常用的关键字evaluate。

    我觉得这个关键字在RF里几乎是无所不能,只要你略懂python语法,evaluate能让你直接运行python脚本。这样可以在Library没有给你提供你想要的方法时,直接用python脚本来实现你想要的方法。

    下面我们列举一些常用的用法,这只是我演示的例子,实际的用途还有更多,欢迎大家自行研究。不熟悉python语法的就去查查python的帮助文档。


    1、生成随机数

     首先在第一个用法的同时,介绍一下这个关键字。

    Evaluate有2个参数,一个是表达式,一个是模块。如图中弹出的窗口,里面有样例。他既可以进行逻辑运算,得到True或False的结果,如例1;也可以调用python的基础函数,如例2,;还可以调用特定的库,如例3;也可以调用多几个库,如例子4。

    但是因为evaluate只能处理一行代码(个人理解),所以如果是很复杂的代码还是放到测试库里去实现比较好。

    接下来说第一个,生成随机数,整数。其实和样例一样很简单,没用很复杂的,大家可以根据需要自己修改随机数的范围。

     

    运行结果为:



    2、字符串

    主要是通过看python帮助找到了一些字符串的集合。


     

    上面主要是列举了一下string里的常量,相当于不同字符的集合吧,有什么用处呢?在第二行可以看到一个简单的应用。看看运行结果:



    每个都是所属字符的集合,英文大家自己找一下翻译吧。

    PS:上面的像乱码一样的东东我也不知道是啥哈。。。


    3、生成随机字符串

    刚才说了,第2个里面那么多常量有什么用呢?下面来结合一下。

    我先选定一个string的常量,然后判断他的长度,设定要生成多少位长度的字符串,然后使用循环生成我需要的随机字符串。实际上该方法在我的QTLibrary里有实现,只不过想试一下,在RF里也可以实现同样的方法。


    放一下我的QTLibrary里面类似的方法如何实现的,核心代码差不多,实际代码略有差异。虽然RF里实现略复杂,但也能实现出来,不得不感叹一下RF的强大,之前有人问过我RF的特点,我的理解是:”像写案例一样写代码,像写代码一样写案例“。


    好了,还是运行一下RF里面的案例吧,中间加了很多log,只截一下前面和最后的运行结果:




    4、去除字符两边的空格,及其他一些字符操作。

    第2行是去掉字符串空格的操作,第3行是替换字符的操作。

    第7、11行是用来处理一些中文显示的,以后有机会细说中文处理的吧,虽然python本身就处理中文不是很好,有时候还是会有些问题,但第11行还是能把一些中文的unicode编码转成中文显示出来的(很奇怪个别同事的电脑上配置和我一样,但是在某些中文处理总报错)。

    第12行是计算字符串里的”行“字的个数。

    最后几行是一个字符串连接和字符串替换。

    其他的行可能是之前写的多余的代码没有去处理,可跳过。这是以前就写在一起了,懒得分开了,大家将就着看吧。


    好了,对照一下前面列的几个点来看运行结果:

    可以看到,一开始aaa是两边都有空格的,处理后没有空格了。剩下的对照一下脚本看结果吧:



    5、日期加减

    其实昨天在群里讨论到日期的地方,我整理了一下大概有三种:

    a、如果对日期无要求的,直接写死就好了。这个我就不列了,应该不难吧,有需要的再联系我。

    b、需要用当前的日期进行加减的,可以直接用get time这个关键字,后面可以跟上你需要返回的值,以及日期的加减,如第一行就是加一天。

    c、需要用一个指定日期进行加减的,指定日期可能是从页面获取的。从第2行到第7行可以解决这个问题,当然我现在这是举例,偷懒一下就用系统日期了;如果是从页面获取,那就是把第2行和第3行换成你的日期获取的脚本即可。


    有的命令比较长的,显示不出完整的,我写在下面。

    第7行的代码:

     

    datetime.date(int('${year}'),int('${month}'),int('${day}'))+datetime.timedelta(days=int('${addDays}'))

    ${addDays}是用来进行加减的,也可以写成-2,后面运算时就会减2天,如果你想加减其他的,比如时分秒,就修改timedelta里面的days=这个参数,具体哪些可以用的查一下python帮助文档。

    顺便说一下为什么写成这样带引号的,首先datetime.date的几个参数都要用int类型的,所以我用int了一下变量,但是后来发现,在int时,有时候会出现一些报错,我不记得报错原因了,但是有的机器报错,有的不报,然后就给变量上加了引号来解决这个问题。欢迎各位自己尝试一下。

    第9行的代码:

     

    time.strftime("%Y-%m-%d-%H-%M-%S")

    这个是格式化时间显示的,你可以根据自己的需要来处理。下面看看运行结果:



    6、执行dos命令

    RF里也可以执行dos命令,很神奇么?

    我先在D盘SVN目录下准备了一个qt目录,然后执行rd来删除他,最后用个dir命令来打印结果到D盘的test.txt文件里。


    先运行一下看看:


    看到结果很奇怪吧,这是啥意思呢?我之前根据结果,只知道0是成功,不成功的有1啊,2啊之类的。后来找度娘查了一下:


    因此我们的第一个删除目录的命令肯定是失败了,为啥呢?其实我是在目录里放了个文件,用过dos的rd命令的都知道,这个命令删除目录需要目录为空,除非你带/s的参数,就算带了/s还要有个确认的过程,所以还要带上/q。


    虽然第一个失败了,但是第二个还是成功了的,因为他返回了0,所以我们看一下第二个的结果:


    大家可以看到,我直接用的dir,他当前的目录实际上是测试脚本所在的目录。

    然后我修改了一下脚本,先删除一下那个文件,当然你也可以按我前面说的直接加上 /s /q 的参数。


    再执行一次,看看结果:



    7、打印系统值

    这是顺着前不久群里的朋友问的问题顺手做了一个。


    这几个值的结果还略有不同,大家根据自己的需要选择使用吧:



    总结一下,Evaluate这个方法非常有用,你可以发挥你的想象,尽情的使用他吧。不过切记开头说的,如果特别复杂的逻辑,还是用test library来实现吧。希望本篇对大家有所帮助。


    个人感觉基础篇其实差不多了,我后续的更新计划主要有介绍不同的测试库、修改现有的RF库S2L库、自己动手写测试库等,大家觉得还有什么需要了解的可以提前反馈给我,我可以适当调整顺序。


  • 相关阅读:
    http uri唯一标识
    http协议
    python模块 sys
    file 文件的操作
    库的介绍及使用
    python os模块
    python的序列化与反序列化
    python 字典的定义以及方法
    python字符串的常用方法
    在Windows下使用adb logcat grep
  • 原文地址:https://www.cnblogs.com/pangblog/p/3315311.html
Copyright © 2020-2023  润新知