python自动化之接口测试


 接口篇:

       在今天之前的很长时间,我一直认为的接口即目前测试系统和外部系统的接口。现在才了解,接口大概分为两种。一种为系统对外的接口,另外一种是程序内部的接口。程序内部接口主要是对于前后端分开而言,如果后端已开发完成相关接口,但是前端界面还没完成,这个时候我们通过单独测试接口,可以更早的解决程序中存在的bug。

       接口分类有很多种,我目前公司用的比较多的接口是webService接口,这类接口是走soap协议,通过http传输,请求报文和返回格式都是xlm格式;另外一种比较常用的接口是http api接口,这种协议是走http协议,返回报文是json串。这两类接口可以用postman、jmeter和soapui来进行测试。当然还有很多其他类型的接口,如dubbo接口

{
        "error_code": 0,
        "login_info": {
                "login_time": "20171211143838",
                "sign": "b4dc507efa37b94923e960df09e37f38",
                "userId": 8
        }
}

       (json串)

 

<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:web="http://WebXml.com.cn/">
   <soap:Header/>
   <soap:Body>
      <web:getSupportCity>
         <!--Optional:-->
         <web:byProvinceName>?</web:byProvinceName>
      </web:getSupportCity>
   </soap:Body>
</soap:Envelope>

        (xlm格式)

     接下来单独简单介绍一下怎样利用工具来测试接口。测试准备工作:安装好jmeter、postman和soapui。接口地址:http://doc.nnzhp.cn/index.php?s=/6&page_id=12,以登陆和学生金币充值为例。

jmeter篇

  jmeter是一款轻量级测试工具,主要是用来做性能测试的,但是也可以用来与jenkins+maven/ant用来做接口自动化持续集成或者性能持续集成。接下来介绍一下怎样用jmeter来做接口测试。

     jmeter中添加的元素较多,常用的主要包括线程组、CSV Date Set Config、Http Cookie、http请求、正则表达式、响应断言与查看结果树。

   

                        (一个最简单的登陆接口)

  Paramenters用来填写post请求参数,Body Data用来放json串或者xml串,Files Upload用来测试上传文件类接口。

 

 

  在实际测试工作中往往需要测试的功能依赖于前面的相关功能,比如上诉接口中学生金币充值接口需要用到登陆后返回的sign值,因此需要添加cookie,http cookie管理器这个时候就用到了。在学生金币充值请求下面加一个cookie管理器,定义名称、值和域,如下图:

 

   

 

接下来就用来说一下经常用到的参数化和关联了。当我们有一些操作如注册操作,需要用到不同数据时,这个时候参数化就起到作用了,jmeter最常用的参数化就是CSV Date Set Config,设置好值后在请求中替换对应的值即可,如下图:

       

(设置参数化)               

(用${name/telephone}替换)

    filename为文件的绝对路径,file encodiing为文件编码,写成UTF-8,variable names填写变量名称,如果参数化多个名称可以用符号隔开,在下面delimiter定义这个符号,一般默认用,即可。其他的话可以保持默认,但是如果是进行压测 sharing mode这里需要注意三个不同区别。All threads这个策略相当于LR中的unique+每次迭代,如注册这种取这个就好了;current thread 这种类似于LR中顺序取值+每次迭代;另外一种current thread group主要是用在多个线程组的情况下,线程组取值就是独立的,如果只有一个线程组和All threads就一样。设置参数化后在线程组中添加多个进程,可以在结果树中去验证取值是否如预期。

    

 

 

当我们有两个请求A和B时,如果B请求需要用到A请求返回的一个值,但是这个返回值是动态变化的,这个时候我们需要做关联。jmeter关联最常用的是正则表达式,这里主要介绍正则表达式和新学的json path extractor,其中后者需要安装插件jpgc-json。注意这两个后置处理器均需要放到被依赖的请求也就是请求A下面,在请求B中传参时用${变量名}即可。

 

 

   

 

  jmeter实现数据库mysql数据库连接测试:先导mysql连接jar包:

 

 

再配置JDBC Connection Configuration,定义变量名称,配置URL,用户名和密码,注意URL在后面增加?allowMultiQueries=true,才能批量操作,如果出现乱码,也在后面加上?characterEncoding=UTF-8这个参数

再新建一个jdbc请求,query type选择Callable Statement可以执行所有语句组合,如果只执行查询语句可以选择select Statement,如果只执行除了查询操作其他所有操作,可以选择update Statement。如下图,对插入的数据可以进行参数化

执行结果查看结果树:

 

      

 

 

postman篇

 postman是一款谷歌游览器插件。接下来主要总结一下psotman如何用来测http协议接口。说到http协议,这里需要介绍一下http请求与返回。

       常见的http请求包括请求行、请求头、空行和请求数据4部分,请求的内容我们可以通过抓包获得。请求行包括了请求方法、URL、http协议版本,请求方法常用的有get和post方法;请求头包括很多内容,每个请求头包括内容不固定,也不一样,主要有一些cookie、Keep-Alive、Cache-Control等这些内容;然后就是请求数据。对于get方法请求参数都放在URL上,post方法传的参数一般放在请求数据里即body里,但是也可以放到URL上。

       说到http请求头里面的cache-control,我想到曾经看过的一篇文章,主要讨论缓存。缓存可以分为强制缓存和对比缓存。强制缓存即客户端发送请求后直接取缓存,这个时候都不需要向服务器发送请求,直接返回状态码200;对比缓存为客户端发送请求时加上缓存标识给服务器,服务器根据这个缓存标识去判断,如果成功,则直接去缓存中拿结果,这个时候返回状态码为304,如果对比不成功,则服务器需要重新响应,响应后状态码为200。而控制是否使用缓存,决定于第一次服务器返回的请求信息。在服务器返回的请求头中会有相关字段标识是否使用缓存,在http1.1协议中一般用Cache-Control来定义。

      言归正传,接下来介绍一下postman实现接口测试。

   

   根据接口文档,选择请求方法(post和get),输入URL,对于post请求,在body中输入相关参数与参数值,对于json串直接raw中输入即可。如果请求有请求头,可以在headers中添加,输入完成后点击send,就可以查看到返回结果。

 

 

soapui 篇

   以天气预报接口为例,接口地址http://www.webxml.com.cn/zh_cn/weather_icon.aspx

   打开soapui工具,选择New soapui Project,导入WSDL文件,点ok,查看查看天气请求,如下图:

?用参数替换,点击运行,右侧会返回结果:

 

 

 

 

    

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM