肖sir__面试第一天课程__接口自动化讲解(4.1)

1、你会做接口测试?  会

2、你做过哪些接口?

cms项目接口:查询接口,登录接口,添加用户接口,用户管理接口,文章管理接口,删除用户接口,删除栏目接口,修改密码接口

保险项目接口:登录接口,车牌信息接口,投保接口,生成保单接口,

银行项目接口:接口接口,提现接口,审批接口,绑卡借款,放款接口,还款接口,逾期接口

银行项目:

 

 

 

 

 

 

 

3、接口测试流程?

答案:

(1)情况一:有接口文档的情况
步骤:
(一)从开发哪里拿到接口文档
(二)接口文档中有接口的参数,
(三)根据接口文档编写接口用例
(四)评审接口用例
(五)部署环境
(六)使用接口测试工具进行接口测试
(七)有bug就通过bug管理工具提交给开发修改
(八)修改好bug,在验证bug,在关闭bug
(九)在输出接口测试报告
(2)情况二:没有文档的情况
(一)通过fiddler抓包工具抓接口
(二)抓接口的参数,
(三)根据接口文档编写接口用例
(四)评审接口用例
(五)部署环境
(六)使用接口测试工具进行接口测试
(七)有bug就通过bug管理工具提交给开发修改
(八)修改好bug,在验证bug,在关闭bug
(九)在输出接口测试报告

4、接口测试你是使用什么工具做的?

(1)postman、

(2)jmeter、

(3)python+requests

5、你具体讲一个你做过的接口?

我做的借款接口

(1)postman

我做的借款接口、打开postman,选择post请求,因为入参,填写接口路径(协议+ip/域名+接口路径),点击body选择入参格式,输入参参数如下:

{

    "code": "ABCDEF",

    "method": "loanCalculate",

    "data": {

        "loanAmount": 100000,

        "loanTerm": 15

    },

    "sign": "{签名规则参考 接口请求签名章节}",

    "timestamp": 1500693926

}

参数输入好以后,在test中进行断言,一般断言响应状态码、响应内容、响应时间

tests["Body is correct"] = responseBody === "response_body_string";

tests["Response time is less than 200ms"] = responseTime < 200;

tests["Status code is 200"] = responseCode.code === 200;

选择一个环境,点击send发送;

在先看响应头和响应体内容:根据业务逻辑:

成功返回:

{

    "code": "success",

    "message": "请求成功",

    "result": {

        "repayAmount":115000,

        "receiveAmount":100000,

        "interestFee":10000,

        "serviceFee":5000,

        "serviceFeeDesc":""

    }

}

如果请求失败则返回:

{

    "code": "error",

    "message": "验签失败"

}

关联接口、依赖接口、接口参数

(2)jmeter

我做的借款接口,使用jmeter工具,首先在测试计划中添加一个线程组;在线程组中的sa、ampler中添加一个http请求,在http请求中填写我们接口参数:协议、服务器/ip、端口、请求方法、路径、编码格式,在填写入参如下:

{

    "code": "ABCDEF",

    "method": "loanCalculate",

    "data": {

        "loanAmount": 100000,

        "loanTerm": 15

    },

    "sign": "{签名规则参考 接口请求签名章节}",

    "timestamp": 1500693926

}

在断言中添加响应断言,断言响应内容、时间、状态码;在监听器中添加查看结果树,在进行保存,点击运行,在查看结果树中能查看绿色表示通过、红色表示报错,在查看结果树中可以查看详情:请求、响应数据、取样器结果

关联接口、依赖接口、接口参数

(3)python+requests

我用的是python+requests做接口测试,先要导入requests库 impost  request ,先讲接口的请求url(url是什么)、请求数据data(data是什么)、请求类型定义(Content-Type':'application/x-www-form-urlencoded');通过requset请求方式请求,请求方式有三种:

第一种:requets.post(url, data=None, json=None)  或requets.get(url, params=None)

第二种:requests.request(method="post",data=None, json=None)或requests.request(method="get",data=None, json=None)

第三:requests.Session()  保持接口会话关系

 创建一个对象来接收请求结果,打印响应结果:

打印响应内容 :print (对象.text)  

打印url内容 :print(dl_rep.url)

打印cookies:print(dl_rep.cookies)

打印请求头:print(dl_rep.headers)

打印json:print(dl_rep.json())

打印状态码:print(dl_rep.status_code)

接口请求到结果可以转换成json格式,在通过if语句或assert进行断言;这就是我做的接口

6、接口自动化是如何做的?

 一、结合python+requests+unittest框架做接口自动化测试

import 导入 unittest这个模块,然后封装一个类class 定义为定义一个test去继承(unittest.testcase):

然后就是类的开始,类开始和结束前面需要加一个装饰器@classmethod,类开用def setupclass(cls)来表示,类的开始cls.session=requests.session()。类结束要用def teardownclass(cls)来表示。类开始结束在整个框架中只会运行一次。然后就是方法开始方法结束,方法开始与结束在每一条用例都会运行一次,方法开始用def setup(self)来表示,方法结束用def teardownclass(self)来表示。后面就写用例,书用例用def test_开头将每个接口都写上顺序,按ascii码顺序排序1-9,A-Z,a-z,在编写接口的参数和接口请求方式等,或者在py文件中写好并导入调用,最后用main方法作为入口:if _ _name_ _==’_ _main_ _’:用来执行用执行偶三种方法:第一种:unittest.main()来调用上面的所有用例,第二种方法使用:unittest.TestSuite ()  套件添加部分用例,addTest(),在使用unittest.estrunner,在用run执行;第三种方法:就是执行一个路径下所有的用例:unittest.defaultTestLoader.discover(start_dir=路径,pattern="搜索的内容"),在使用unittest.TextTestRunner()运行用例,还可以导入报告模板HTMLTestRunner,在去open打开报告文件,写入执行内容、标题、执行情况、测试人员,生成接口测试报告。这就是我的接口自动化测试

代码:

import  unittest
import requests
import time
from  xin.HTMLTestRunner3_New import HTMLTestRunner
class Cms(unittest.TestCase):
    @classmethod
    def  setUpClass(cls):
        cls.session=requests.session()  #session是是一个全局变量作用是保持上下接口会话和关联
    @classmethod
    def tearDownClass(cls):  #类的结束
        print("类的结束")
    def  setUp(self):   #方法开始
         print("方法的开始")
    def  tearDown(self):
        print("方法的结束")
    def  test001(self):  #定义一个接口用例
         url="http://cms.duoceshi.cn/cms/manage/loginJump.do"
         data={"userAccount":"admin","loginPwd":123456}
         headers="Content-Type: application/x-www-form-urlencoded"
         r=self.session.post(url=url,data=data,json=headers)
         print(r.text)
    def  test002_yhgl(self):  #用户管理接口
            l_url = 'http://cms.duoceshi.cn/cms/manage/queryUserList.do'
            l_data={'startCreateDate':'' ,'endCreateDate':'','searchValue':'' ,'page': 1}
            headers={'Content-Type': 'application/x-www-form-urlencoded'}
            l_r =self.session.post(url=l_url,data=l_data,headers=headers)
            print (l_r.text)
def uits(): #创建一个普通函数,作用是容器存放用例
    us=unittest.TestSuite()  #创建一个套件对象
    us.addTest(Cms("test001"))  #单个用例执行
    # us.addTest([Cms("test001"),Cms("test002")]) #执行多条用例



if __name__ == '__main__':
    # unittest.main()  #第一种方法
    # r=unittest.TextTestRunner()
    # r.run(uits())  #第二种方法
    # path=r"C:\Users\Administrator\PycharmProjects\untitled6\xin"
    # ss=unittest.defaultTestLoader.discover(start_dir=path,pattern="re*.py")
    # runner=unittest.TextTestRunner()
    # runner.run(ss) #第三种搜索路径方法
    path=r"C:\Users\Administrator\PycharmProjects\untitled6\xin"
    ss=unittest.defaultTestLoader.discover(start_dir=path,pattern="re*.py")
    bgpath=r"C:\Users\Administrator\PycharmProjects\untitled6\xin"
    now=time.strftime("%Y-%m-%d-%H-%M-%S")
    filename=bgpath+"\\"+str(now)+'api_report.html'
    f=open(filename,"wb")
    runner=HTMLTestRunner(stream=f,title="接口自动化测试报告",description="用例执行情况如下")
    runner.run(ss)
    f.close()#释放资源,关闭文件

 二、 python+requests+unittest 接口自动化框架设计分层如下:

首先我们需要在pycharm里新建一个项目名称,然后我们需要建6个包:cms_api、config、report、run、testcase、utils包。

cms_api:用来组建接口、发送接口请求
config:放入接口的入参信息
report:存储测试用例生成的报告
run:运行所有的测试用例
testcase:接口的测试用例
utils:工具类、创建报告和发送邮件模块
首先写好config的入参的相关信息,比如url,data,header,写好各个接口的相关入参信息
cms_api包中组建接口的和发送接口请求,导入requests模块
创建一个全局的session对象、用来保持会话的状态和管理上下文,把各个接口的请求方式编写出来,同时用rep.json()来,全部封装在一个类里
testcase包中组建测试用例导入unittest模块、cms_api里面的Cms类
定义一个类,且继承unittest中的TestCase,用匿名对象来调用实例方法,然后进行断言
run模块来运行所有的测试用例导入unittest、time,mail3, HTMLTestRunner,定义项目的路径
定义用例的路径,定义测试报告的名称
定义自动搜索用例,执行测试用例并生成报告,这里要注意时间戳。
E测试用例报告生成在report里面,用谷歌浏览器打开
F最后就是把报告发送到邮件里,

代码:====》多测师讲解 _接口自动化框架设计_高级讲师肖sir

三、使用分层思想进行接口自动化框架: python+requests+unittest+ddt 

案例1:

先建立一个新的项目,然后建一些包,

定义一个confi包是用来组建接口请求的,

定义一个data包用来存放测试用例表格的,

定义一个library包存放外部导入的工具函数,

定义一个report包存放最终的测试报告,

定义一个run_allcase包执行所有的用例并生成报告用的,
定义一个testcase包在里面运行编写的测试用例,

定义一个utils包存放所有自己写的封装语句。

首先在utils包下新建一个head_path模块在里面编写项目与包的路径。

conf包下建一个conf.ini文件里面写入要运行的系统基本信息和登陆账号密码。

utils包下新建一个head_conf模块在里面编写处理ini文件的代码。

utils包下新建一个head_requests模块在里面写入封装接口的工具类。

utils包下新建一个head_excel模块在里面写入读取表格的代码,使用pip3 install openpyxl下载。

testcase包下新建一个test_login模块在里面写入数据驱动的代码,需要拿到ddt这个工具函数。

wandwos系统中新建一个表格,表格内写入id、接口名称、用例标题,、用例类型、url、要填写的信息、预期结果、是否通过空置。然后将表格导入项目包中的data包内。

testcase包下新建一个test_login模块,用来写入运行表格用例的代码。

最后把HTML文件导入到项目包内的library包下,然后在run_allcase包下新建一个模块,里面写入运行所有用例的代码,和生成测试报告的代码。并将报告的存放路径放到report包下。

 代码参考:https://www.cnblogs.com/xiaolehong/p/16801467.html

案例2:

第1层的话是config配置层,这个里面主要是封装了一些我们测试环境的url地址和一些连接数据库的IP地址,用户名密码等等
第2层是data数据层,这个里面主要放的是接口的用例,把接口的入参,接口的路径,接口的编号,请求方法都放在这个里面了,一个接口放在一个sheet页面里面,然后一个sheet页面里面有多个接口测试用例,有正常场景的也有多个异常场景的
第3层是一个library第三方的公共库层,里面主要是放了发邮件的工具类,生成测试报告的工具类还有做数据驱动的ddt模块
第4层就是utils工具类层,主要封装了读取Excel表格,读取ini配置文件和发送接口请求的工具类
第5层就是testcase用例层,这个里面首先会创建一个类,然后在里面创建以test开头的方法,然后定义一个data装饰器主要是用来接受Excel表格里面的接口入参,第一步先做数据的处理,然后第二步再通过封装好的发接口请求的工具类发送接口请求得到response返回值,第三步再对接口进行断言,一般会对接口返回的状态码和返回的比较具有唯一性的文本信息进行断言
第6层就是run运行层,首先会通过把所有的用例加载到一个suite套件里面,然后再通过调用run方法运行这个套件,并且通过HTMLtestrunner模块生成测试报告放到

第7层报告层里面,然后最后通过Jenkins做可持续集成,在回归测试阶段,每天晚上都会运行一下我们的接口自动化用例,大致的一个框架结构就是这样的。

---------------------------------------------------------------------

案例:

API自动化框架

API自动化框架分为conf、data、utils、api、testcase、runner、report、log8个模块。

conf是用来储存系统环境、数据库、邮件等的配置参数、项目的绝对路径、各个模块的绝对路径、各个接口的参数url、data、headers、json、verify(关掉https),其中有ini、yaml、xlsx文件等,通过响应的方法来处理相应的文件。ini文件是section、option、value的形式,一般通过继承configparse模块进行处理,yaml文件的读取是以字典的形式,一般是用@unitest.skip@file_data@unpack装饰器进行读取,xlsx文件主要是通过openxlsx、xlrd、xlwt、xlutils模块进行读取。

data是用来封装进行的是用例的数据,一般是通过xlsx进行读取。

utils模块封装了处理文件、读取数据库内容、发送报告、处理日志等模块。调用数据库用到pymysql模块、控制日志输出用到了logging模块、邮件发送用到了smtp模块和Email模块、处理ini文件用到了configparse模块、读取xlsx用到了openxlsx、xlrd、xlwt、xlutils等模块。

api模块封装了各个接口的发送api请求的方法。通过调用request模块来进行请求的发送。

testcase模块用来封装测试用例。通过unitest测试框架,继承unitest.TestCase类、api模块封装的接口连接方法、使用ddt数据驱动进行测试。

runner模块用来封装要运行的测试用例,可以通过unitest.TestSuite来封装要运行的测试用例,而大部分都是通过unitest.defaultTestLoad.discover()方法来批量指定要运行的测试用例文件、可以通过unitest.TestRunner来运行测试用例,可以通过HTMLTestRunner运行测试用例和生成测试报告。

report是用来储存运行测试用例后的测试报告。

log是用来存储运行测试用例的日志,用到logging模块,设置输出到控制台的日志文件,设置输出到文件的日志等级等。

 

=============================================

接口面试题:====》多测师拱墅校区肖sir_高级金牌讲师_接口测试之接口面试题(7)

 

posted @ 2022-11-16 17:47  xiaolehua  阅读(450)  评论(0编辑  收藏  举报