接口自动化

一、自动化分类

(1)接口自动化 > python/java+requests+unittest框架来实现 > python/java+RF(RobotFramework)框架来实现——对于编程要求不高

(2)Web UI功能自动化 > python/java+selenium+unittest+ddt+PO框架来实现 > python/java+RFS(RobotFrameWork+Selenium)框架来实现——对于编程要求不高

(3)App自动化 > python/java+appnium+unittes框架来实现 > python/java+RF(RobotFramework)框架来实现——对于编程要求不高

二、接口自动化与Web自动化的区别

(1)接口自动化是没有界面的,不需要对界面元素定位操作,不需要考虑界面延迟的问题,执行效率更高

(2)接口自动化用的是requests测试库,Web自动化用的selenium测试库

(3)接口自动化的覆盖率可以达到100%(绝大部分的接口都可以实现自动化)

Web自动化的覆盖率能达到80-90%算OK(可能会有某些功能是没办法实现自动化的)

三、怎么做接口自动化

3.1、流程 A. 确定业务范围,哪些业务功能的接口可以做自动化——接口自动化的覆盖率可以达到 100% B. 时间进度安排,人员分配 C. 确定自动化测试框架 D. 准备数据——准备接口用例数据 E. 编写接口自动化脚本

3.2、搭建接口自动化测试环境

1、安装python3.x——配置python的环境变量

2、安装PyCharm——python开发工具

3、安装测试库 Requests库—— 提供了丰富的用来发请求,对请求进行处理的API函数 xlrd,xlwt库—— 提供了对Excel文件进行操作的API函数 Pymysql库—— 提供了对Mysql数据库进行操作的API函数 paramsunittest库—— 实现参数化的库 Json库—— 提供了对Json格式的数据进行操作的API函数(python自带的基础库) Re库—— 可以使用这个库中的API函数对HMTL数据进行操作

4.3、准备数据——准备接口用例数据 我们把接口用例数据放入在Excel表格中,因为每一个接口都包含:请求地址,请求方式,请求参数,以及响应数据;所以在Excel表格中按照以下方式来组织我们的接口用例数据,包含以下几个内容: 用例名称,请求地址,请求方式,请求头,请求参数,预期结果(断言) 然后我们会封装一个函数去读取Excel数据,以参数的形式传递到脚本中,具体操作步骤如下:

4.4、编写自动化测试脚本

1、步骤:
    A、导包import requests
    B、组织请求参数url = 'http://localhost/fw/index.php?ctl=user&act=dologin&fhash=hbUjHVrQIgHkwdMdNGnPrSiIkVBeWcrOvJpmsXgyNuMewKfKGy’par = {
         'email’: 'Jason’,
         'user_pwd’: 'TWlKaGRrRFJrQXJZZlFXYkh5WlNQZ2tpZkFZQlVlUUhyRE5SdndSUGdKanFDTG1LYUYlMjV1NjVCOSUyNXU3RUY0emdwMTIzNDU2JTI1dThGNkYlMjV1NEVGNg==',
        'auto_login’: 0,
        'ajax’: 1}
    C、发送请求res = requests.post(url, data=par)res = requests.get(url,params=par)
    D、提取响应对象中的数据,并做断言1、提取响应*body*内容**
     res.text     —— 如果返回的是html格式的数据,使用res.text提取`
     res.json()   —— 如果后台返回的是json格式的数据,则使用这个API函数来提取`2、提取响应头***
     res.headers3、提取状态码,响应信息
     res.status_code
     res.reason4、提取cookie值
     res.cookies()2、传递请求头header = {
    'User-Agent’: 'Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:67.0) Gecko/20100101 Firefox/67.0’,
    'Accept’: 'application/xml’,}res = requests.post(url,data=par,headers=header)    3、传递cookie,token值
    通过请求头来传递 —— 直接从浏览器上查看cookie值,并传递到后台。header = {
    'Cookie’: 'PHPSESSID=3724b412550a557825da5528dd6198c6’                  }res = requests.post(url,data=par,***headers=heade***r,allow_redirects=False)
    发请求的时候通过cookies这个参数来传递import requests#1. 登录,获取cookie值def getCookie():
    url = 'http://localhost/fw/index.php?ctl=user&act=dologin&fhash=hbUjHVrQIgHkwdMdNGnPrSiIkVBeWcrOvJpmsXgyNuMewKfKGy’
    par = {
        'email’: 'Jason’,
        'user_pwd’: 'TWlKaGRrRFJrQXJZZlFXYkh5WlNQZ2tpZkFZQlVlUUhyRE5SdndSUGdKanFDTG1LYUYlMjV1NjVCOSUyNXU3RUY0emdwMTIzNDU2JTI1dThGNkYlMjV1NEVGNg==',
        'auto_login’: 0,
        'ajax’: 1
    }
    res = requests.post(url, data=par)
    return res.cookies#2. 调用充值接口#2.1 获取cookie值cookie = getCookie()#2.2 发充值请求url = 'http://localhost/fw/member.php?ctl=uc_money&act=incharge_done’par = {
    'check_ol_bl_pay’:’on’,
    'money’:1000,
    'bank_id’:0,
    'memo’:234567890,
    'payment’:5,}#发充值请求res1 = requests.post(url,data=par,cookies=cookie,allow_redirects=False)            # 自动重定向的,可以取消自动重定向print(res1.status_code)print(res1.reason)print(res1.headers)
    先创建一个session对象,所有请求都使用这个session对象来发送import requests#1. 发登录请求url = 'http://localhost/fw/index.php?ctl=user&act=dologin&fhash=hbUjHVrQIgHkwdMdNGnPrSiIkVBeWcrOvJpmsXgyNuMewKfKGy’par = {
    'email’: 'Jason’,
    'user_pwd’: 'TWlKaGRrRFJrQXJZZlFXYkh5WlNQZ2tpZkFZQlVlUUhyRE5SdndSUGdKanFDTG1LYUYlMjV1NjVCOSUyNXU3RUY0emdwMTIzNDU2JTI1dThGNkYlMjV1NEVGNg==',
    'auto_login’: 0,
    'ajax’: 1}#创建一个seesion对象,后期使用这个session对象来发请求ses = requests.session()#发登录请求,返回的cookie值会自动化保存到session对象中response1 = ses.post(url,data=par)#2. 发充值请求url = 'http://localhost/fw/member.php?ctl=uc_money&act=incharge_done’par = {
    'check_ol_bl_pay’:’on’,
    'money’:1000,
    'bank_id’:0,
    'memo’:234567890,
    'payment’:5,}response2 = ses.post(url,data=par,allow_redirects=False)print(response2.headers)

4.5、工程管理维护与优化

1、数据驱动——实现接口用例数据与脚本的分离 我们把接口用例数据放入在Excel表格中,因为每一个接口都包含:请求地址,请求方式,请求参数,以及响应数据;所以在Excel表格中按照以下方式来组织我们的接口用例数据,包含以下几个内容: 用例名称,请求地址,请求方式,请求头,请求参数,预期结果(断言) 然后我们会封装一个函数去读取Excel数据,以参数的形式传递到脚本中,具体操作步骤如下:

安装xlrd库
    pip install xlrd
    调用xlrd库中的API函数来实现对Excel表格数据的读取#封装一个读取Excel表格数据的函数#对Excel表格数据的读取需要用到一个库——xlrd库import xlrddef get_data(filename,sheetname):
    #1. 打开Excel文件
    workbook = xlrd.open_workbook(filename)
    #2. 打开Excel文件中的某张表
    sheet = workbook.sheet_by_name(sheetname)
    #3. 读取表中的内容
    list = []
    for I in range(1,sheet.nrows):
        data = sheet.row_values(i)
        list.append(data)
    return listif __name__=='__main__’:
    result = get_data('D:\\JMeter\\1947_Project\\cxy-project02\\data\\接口用例数据.xls’,’登录’)
    print(result)
    问题解决1工程问题:
    1、没有安装xlrd
    2、没有把xlrd导入工程

2、*unittest*框架 作用:用来管理用例,加载用例,执行用例 原理:有几个核心组件

1、测试固件 setUp() 每条用例执行之前,首先会执行这个setUp()方法,在setUp()方法中完成准备初始化工作 比如:连接数据库,后期在将Web UI功能自动化的时候,可以在这里去打开浏览器,配置 tearDown() 每条用例执行完成之后,回收一些资源,比如:关闭数据库,关闭浏览器

2、测试用例 每一条用例需要实现一个用例方法,每个用例方法都必须要以test开头

3、测试套件 执行用例的时候,需要创建测试套件,把用例加入测试套件。

4、加载器 用来加载用例的,把测试用例加入测试套件中

5、执行器 用来执行测试套件中的用例的 如何使用unittest框架来编写用例

#1. 导包import timeimport unittestimport requestsfrom common.excelUtils import get_dataimport paramunittest#读取excel表格中的数据list = get_data('D:\\JMeter\\1947_Project\\cxy-project02\\data\\接口用例数据.xls’,’登录’)#2. 定义一个类,去继承unittest.TestCase@paramunittest.parametrized(*list)                  # 引用list中的所有数据class FwLogin(unittest.TestCase):
    def setParameters(self,case_name,url,method,headers,params,assert_info):
        '’’
        有多少条用例,这个函数就会执行多少次,每执行一条用例之前先会执行这个函数,把数据提取出来。
        :param case_name:
        :param url:
        :param method:
        :param headers:
        :param params:
        :param assert_info:
        :return:
        '’’
        self.case_name = str(case_name)
        self.url = str(url)
        self.method = str(method)
        self.headers = str(headers)
        self.params = str(params)
        self.assert_info = str(assert_info)
    #1. 实现一个用例方法
    def test_login_case(self):
        time.sleep(5)
        #1. 组织参数
        self.headers= eval(self.headers)                # 将字符串转化为字典
        self.params = eval(self.params)
        #2. 发请求
        if self.method == 'POST’:
            response = requests.post(self.url,data=self.params,headers=self.headers)
        else:
            response = requests.get(self.url,params=self.params,headers=self.headers)
        #3. 检查,断言
        self.check_result(response)
    def check_result(self,response):
        '’’
        断言  检查结果的
        :param response:
        :return:
        '’’
        self.assert_info = eval(self.assert_info)           #预期结果
        try:
            self.assertEqual(response.status_code,200,’响应状态码错误’)
            self.assertEqual(response.reason,’OK’,’响应的响应码错误’)
            self.assertDictEqual(response.json(),self.assert_info,’响应的正文内容不一致!’)
            print('%s测试用例通过!’ %self.case_name)
        except AssertionError as e:
            print('%s测试用例不通过!%s’ %(self.case_name,e))
 if __name__ == '__main__’:
    unittest.main()
(0)

相关推荐

  • 如何编写接口测试用例?测试工程师必备技能!

    自动化始终只是辅助测试工作的一个手段,对于测试人员而言,测试基础和测试用例的设计才是核心.如果测试用例的覆盖率或者质量不高,那将这部分用例实现为自动化用例的意义也就不大了. 那么,接口测试用例应该怎么 ...

  • python接口自动化1-发送get请求

    前言 requests模块,也就是老污龟,为啥叫它老污龟呢,因为这个官网上的logo就是这只污龟,接下来后面的自动化都离不开它. 一.环境安装 1.用pip安装requests模块 >>p ...

  • python接口自动化2-发送post请求

    前言 发送post的请求参考例子很简单,实际遇到的情况却是很复杂的,首先第一个post请求肯定是登录了,但登录是最难处理的.登录问题解决了,后面都简单了. 一.查看官方文档 1.学习一个新的模块,其实 ...

  • python接口自动化3-自动发帖(session)

    前言 上一篇模拟登录博客园,但这只是第一步,一般登录后,还会有其它的操作,如发帖,评论等,这时候如何保持会话呢? 一.session简介 1.查看帮助文档,贴了一部分,后面省略了 >>im ...

  • python接口自动化4-绕过验证码登录(cookie)

    前言 有些登录的接口会有验证码:短信验证码,图形验证码等,这种登录的话验证码参数可以从后台获取的(或者查数据库最直接). 获取不到也没关系,可以通过添加cookie的方式绕过验证码. 一.抓登录coo ...

  • python接口自动化5-Json数据处理

    前言 有些post的请求参数是json格式的,这个前面第二篇post请求里面提到过,需要导入json模块处理. 一般常见的接口返回数据也是json格式的,我们在做判断时候,往往只需要提取其中几个关键的 ...

  • python接口自动化6-重定向(Location)

    前言 某屌丝男A鼓起勇气向女神B打电话表白,女神B是个心机婊觉得屌丝男A是好人,不想直接拒绝于是设置呼叫转移给闺蜜C了,最终屌丝男A和女神闺蜜C表白成功了,这种场景其实就是重定向了. 一.重定向 1. ...

  • python接口自动化7-参数关联

    前言 我们用自动化发帖之后,要想接着对这篇帖子操作,那就需要用参数关联了,发帖之后会有一个帖子的id,获取到这个id,继续操作传这个帖子id就可以了 一.删除草稿箱 1.我们前面讲过登录后保存草稿箱, ...

  • python接口自动化8-参数化

    前言 前面一篇实现了参数的关联,那种只是记流水账的完成功能,不便于维护,也没什么可读性,接下来这篇可以把每一个动作写成一个函数,这样更方便了. 参数化的思维只需记住一点:不要写死! 一.登录函数 1. ...

  • python接口自动化9-https请求(SSL)

    前言 本来最新的requests库V2.13.0是支持https请求的,但是一般写脚本时候,我们会用抓包工具fiddler,这时候会 报:requests.exceptions.SSLError: [ ...