美文网首页编程技术类
从0.1开始接口自动化的一点实践

从0.1开始接口自动化的一点实践

作者: d773b21d4377 | 来源:发表于2017-07-20 16:31 被阅读187次

    从小老师会跟我们说:好脑子不如烂笔头,能记住学会并写得出来才是自己的东西,心血来潮撸了三个多月前端代码,最后单位组织的一场培训让我又对自动化测试重新感了次冒,那就简单写下接口自动化的一点实践,希望能给想学自动化却无从下手的同学一点帮助,少踩一些坑,我会从很浅显易懂的例子和代码来说,不用担心看不懂,因为太难太复杂的我也不会啊。开始正题之前呢,先啰嗦几句(敲黑板),说到自动化,很多人脑子里浮现出来的或者听人说过的都是各种录制工具辅助测试,像selemium啊,Appnium啊这些,虽说这些也是自动化的一种,但我一直很不推崇使用这些工具,因为只长手不用脑子也可以使用这些工具,代码需要自己写而不是工具自动生成,就像你一直发懒每天订外卖,时间长了刀都不会使了,反正半月前我忙活了两个多小时做的饭自己都下不去嘴。


    前续工作

    好啦,开始正题吧,现在接口测试的框架较多,大部分公司用到的有Postman、JMeter、RobotFramework等,不过本文意在指导新手同学理解接口测试原理,所以还是从0开始手写,加深理解。人家都是从0开始,我这写个从0.1开始,其实不是装X啦,这0.1是要求你会一点脚本语言,Python、Ruby、JAVA啥都可以,这里就用对新手友好的Python为例编写(Ruby我也不会)。安装Python可以去官网https://www.python.org/downloads/下载,我自己安装的版本是3.5.2(现在Py2.X已不更新了,熟练2.7的朋友还是早日换成Py3吧),安装非常简单,一直下一步就成,记得最后一步勾选上Add Python 3.5 to PATH再install,否则可能会出现报错‘python’ 不是内部或外部命令,也不是可运行的程序或批处理文件,这是因为上文提到的没有勾选,那就要手动把python.exe所在的路径添加到Path中,不会的可以参考jdk安装。安装成功后命令行敲python,如果提示信息如下,说明安装成功:

    关于IDE没啥说的,直接下个Pycharm吧,http://www.jetbrains.com/pycharm/download/#section=windows这样你就可以尽情的设置断点、单步执行。英文不太好的同学可以下个汉化包。

    这时候没有代码基础的同学要去找一本书开始学学基础,过一遍基础并熟悉下单元测试、序列化和网络请求等一些知识就可以进行下面的内容了。


    模拟网络请求

    接口测试一般是基于HTTP和HTTPS的网络请求,了解了HTTP协议和HTML文档,我们其实就明白了一个Web应用的本质就是:

    a.浏览器发送一个HTTP请求;

    b.服务器收到请求,生成一个HTML文档;

    c.服务器把HTML文档作为HTTP响应的Body发送给浏览器;

    d.浏览器收到HTTP响应,从HTTP Body取出HTML文档并显示。

    底层代码由专门的服务器软件实现,我们用Python专注于生成HTML文档。因为我们不希望接触到TCP连接、HTTP原始请求和响应格式,所以,需要一个统一的接口,让我们专心用Python编写Web业务。WSGI接口满足了我们的需求,定义非常简单,它只要求Web开发者实现一个函数,就可以响应HTTP请求。但WSGI接口还是太底层了,WEB开发讲求效率,有没有更抽象一点的减少开发人员的工作呢?答案当然是肯定的,不然怎么说”人生苦短我用Python“呢。现在用的比较多的是httplib模块和requests模块,我还是用更加简洁明了一点的requests库来举例。

    导入requests

    使用pip来扩展第三方库,打开CMD输入pip install requests,提示如下图表示导入成功:

    导入成功后就可以开始模拟网络请求之旅了。不多废话,代码见:

    模拟GET请求方式:

    模拟POST请求方式:

    requests库的文档给大家:

    http://docs.python-requests.org/en/master/user/quickstart/#more-complicated-post-requests


    一个简单的接口自动化测试用例

    上面说的两种模拟请求方式只是个基础知识,下面才开始真正的接口自动化验证,这里需要一点断言知识,忘了的同学先补一下咯。

    开始前的准备工作就是需要大家理解下你要测试的业务需求,跟你的产品经理要项目原型,可惜我们公司没有产品经理,那就找项目经理要一份需求文档吧,起码要把里面重要的逻辑吃透。其次你要了解代码逻辑,业务逻辑不等于代码逻辑,看看别人写的代码,做个单元测试也挺有趣。听说阿里的测开review开发的代码,不知道真的假的^-^。然后就是规范的接口文档,规范的接口文档可以让接口测试事半功倍。下面是我用excel手写的一份简易版接口文档(工作电脑连不上,文档截图没法传,好气啊)

    估计大家也等急了,终于到开始接口测试了,对照接口文档,看返回结果是不是跟预期的相同,这里就需要unittest模块比较熟练,通过断言来测试返回结果,下面看下我自己写的测试模板:

    执行单个用例可以使用测试入口代码的形式执行,用例多了推荐使用另一种方法:在命令行通过参数-m unittest myapi_test直接运行,对自动化更友好。



    开始接口自动化测试

    上面为啥用了两行分割线呢,因为以上的还是基础,写了这么多只是为了让大家方面学习,循序渐进,理解的透彻点,下面才开始接口自动化。

    想想自己手头的这几个项目,对比了下选择一个最简单的业务逻辑来编写一个接口自动化的例子。刚搞完的预飞系统临时航路模块中有航空公司增加航路这么个逻辑,提炼出一个简单明了的业务需求如下

    根据里出的业务需求,定义需要处理的函数如下:

    开始做自动化之前,还需要大家了解下数据库知识,最起码表关系还是要了解下的。

    我下面写的代码可能比上面测试模板的代码多了一点,但是总体思想是一致的,对照注释应该看得懂。需要说明的是实际工作中是手输航路内容,这里我写成了file-like的导入形式,记得上面我让大家要先学习下JSON的序列化知识,这里就用上了,传输要用到JSON的反序列化

    以上只是一个接口的设计实现,但实际工作中一次测试可不止跑一个接口,几百上千的case还是有的。所以要写一个自动跑接口的的用例,这样才能体现出自动化嘛

    以上代码可以让自动化用例自动跑并输出测试报告。with语句不太了解的同学可以自行查找学习下,主要是为了保证文件读写可以在报错的情况下正确关闭。

    以上只是接口自动化的实现,总体来说还是比较糙,实际工作中这些case还需要优化。例如增加配置文件(配置数据库、url、用户信息、状态码等)、增加初始化配置文件的case、增加配置数据库连接和获取用户cookie的文件等。一次说太多不好消化,优化case周末有空再写写。


    如果代码让你头疼,那也请读完。刨除代码,接口自动化框架无非如下结构,并没有多繁琐,是不是感觉比你用自动化工具生成那种没价值的代码爽多了。觉得吃力可能因为你的代码基础不太牢固,先去巩固基础,然后再看一次我写的结构,你就会觉得so easy。(打码的不需要,至于码不太专业,就不要在意细节啦)


    下周有时间会再聊聊基于Jenkins持续集成自动化的实践,这些都是自己一个人捣鼓的,没人指导,有大神就请拍砖,有同事学习可以共同进步。文笔一般,排版较渣,谁还没个当作家的理想。

    PS:单位今天断网,打包图没带,远程不到工作电脑,回家全部重新手撸的代码截图,接口文档自己用excel手写的,凑合看吧(默默无语两眼泪,此处应该有掌声~)

    相关文章

      网友评论

      本文标题:从0.1开始接口自动化的一点实践

      本文链接:https://www.haomeiwen.com/subject/hvqjkxtx.html