接口测试框架分析

框架大体上已经写完了,不过说实话好多代码让我自己写我也写不出来,那该怎么办呢?很简单,把现在已经写好的代码保存起来,等用的时候拿出来复制粘贴就好了,如果你是大神,自己会写,那就更厉害了~

现在我们按模块分析一下代码:

1、setting.py

这个文件放置的是一些常量,正如我们看到的比如接口地址前缀、电子邮件的配置,以及Log内容的设置等,这里放置的内容在修改的时候也会非常方便。

2、common->integretion

这个模块下只有一个文件——HTMLTestRunner.py文件,大家都已经知道了,这个文件是用来发邮件用的模板,这个文件大家只需要下载下来复制进去即可。

3、common->module->email_module.py

这个文件中放的是发送邮件的逻辑代码,需要注意的是:

text_msg = MIMEText(
            "<html><body><p><span style='color: red;'>&nbsp;&nbsp; 大家好:</span></p><p>&nbsp;&nbsp;&nbsp;&nbsp; "
            "附件为本次UI自动化测试报告,请查收。<br/></p></body></html>",
            'html', "utf-8")

这里放的是一个html格式的内容,第二个参数是“html”;此外还附加了一个测试报告的附件一起发送。而邮件发送人、接收人、邮件设置的一些参数都是读取常量文件setting.py读取到的,这样的好处是当你需要修改邮件发送、接收,或者修改发送邮件的服务器时会非常方便——把常量看做对象,需要的时候就只需要调用,保证代码不会被修改导致出现代码上的错误。

4、common->module->environment_module.py

这个方法的作用就是读取setting.py文件中的地址并返回

5、common->module->excel_module.py

读取excel文件,其中get_sheet_by_index,get_sheet_by_name,get_row_values,get_col_values等方法分别是通过索引、名称获取sheet内容、行内容以及列内容。最后的get_all_content函数作用我们在这里分析一下:

    def get_all_content(self, sheet_obj):
        __content = []
        # 总行数
        __rows_num = self.get_number_of_rows(sheet_obj)
        for tmp in range(__rows_num):
            tmp_list = []
            # 遍历行内容
            __row_value = self.get_row_values(sheet_obj, tmp)
            for i in __row_value:

                i = i.encode('utf8')
                # 将每行内容放到一个列表里
                tmp_list.append(i)
            __content.append(tmp_list)
        return __content

首先定义一个空列表__content(两个下划线的目的是为了避免子类重写),然后__rows_num保存获取到的行数。

range(3),返回0,1,2。所以我们的for循环就是遍历行数次,在for循环中,先定义空列表tmp_list,通过get_row_values函数获取每行的内容,我们知道,我们读的是一个excel文件,所以每行的内容以列表的形式返回,继续遍历这些内容,然后进行编码,将编码后的内容放在新的列表中,最后返回编码后的内容列表。

6、common->module->requests_module.py

本模块中,GetResponse类下的方法就是多判断了一下是否携带session,除此之外和我们说过的requests方法没有区别。而AnalysisResponse类则把提取url、status_code、content、headers、cookies都单独写成了方法,很容易理解。这样的方便就是为了今后应用的时候直接调用方法,不用再重新去写获取的方法,其实回过头想想,感觉这里其实没那么大的必要,我觉得。

剩下的就是testcase包下的用例文件了,其实在用例中是要增加断言的,我这里问了通过,没敢写断言。

最后就是咱们写了至少五六遍的run_all_tests.py文件了,吾不言。

不明白的请留言。

原文发布于微信公众号 - 自动化测试实战(gh_839e78b6ba28)

原文发表时间:2017-11-14

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏专业duilib使用+业余界面开发

解决duilib使用zip换肤卡顿的问题(附将资源集成到程序中的操作方法)

1924
来自专栏专注 Java 基础分享

Java并发之线程间的协作

     上篇文章我们介绍了synchronized关键字,使用它可以有效的解决我们多线程所带来的一些常见问题。例如:竞态条件,内存可见性等。并且,我们也说明了...

2279
来自专栏编程

autoload自动加载机制使用

在PHP开发过程中,如果希望从外部引入一个class,通常会使用include和require方法,去把定义这个class的文件包含进来,但是这样可能会使得在...

22210
来自专栏后端技术探索

利用 PHP 名称空间编写可读且可维护的代码

“Conan 是我榜样。” 如果我在餐桌上说这句话,我儿子会以为我说的是游戏 “野蛮人柯南”,而我妻子会以为我说的是脱口秀主持人 Conan O'Brien。这...

1332
来自专栏小樱的经验随笔

【批处理学习笔记】第二十课:扩充字符串

    “扩充”这个词汇来自于微软自己的翻译,意思就是对表示文件路径的字符串进行特殊的处理,具体功能罗列如下: ========================...

3336
来自专栏大闲人柴毛毛

Java并发编程的艺术(十二)——线程安全

1. 什么是『线程安全』? 如果一个对象构造完成后,调用者无需额外的操作,就可以在多线程环境下随意地使用,并且不发生错误,那么这个对象就是线程安全的。 2. ...

3765
来自专栏IMWeb前端团队

nodejs中错误捕获的一些最佳实践

本文作者:IMWeb yisbug 原文出处:IMWeb社区 未经同意,禁止转载 本文内容大部分来自 https://www.joyent.com/...

2226
来自专栏杂项

Leveldb 源码类功能解析

Leveldb 的基本介绍网上很多资料,这里不赘述,我们直接进入主题,解析 leveldb 源码中各个类(概念)的功能。

29414
来自专栏我有一个梦想

C++服务器开发之笔记三

为什么需要原子性操作? 我们考虑一个例子: (1)x++这个常见的运算符在内存中是怎样操作的? 从内存中读x的值到寄存器中,对寄存器加1,再把新值写回x所处的内...

2047
来自专栏H2Cloud

C++中消息自动派发之三 About JSON Encode

  《C++ 消息自动派发》系列上篇介绍了IDL解析器,生成的C++代码只支持JSON转C++ struct。 经过新的重构,这次增加了对C++ struct ...

4505

扫码关注云+社区

领取腾讯云代金券