zoukankan      html  css  js  c++  java
  • 接口测试笔记二

    上一篇

    接口测试笔记一

    为什么开发测试框架?

      测试工具的局限性

      维护成本的增加

    这里使用python,也可以选用自己熟悉的语言

    1.安装requests

    pip install requests

    2.基本请求

    get请求,getTest.py

    import requests
    url_index='http://127.0.0.1:8081/api/files/detail?id=1'
    response_index = requests.get(url_index)
    print('Response 内容:'+response_index.text)

    post请求

    需要通过 Body 传递参数

    postTest.py

    import requests
    url_search = 'http://127.0.0.1:8081/api/files/searchByIds'
    # 拼凑 body 的参数
    payload = {
        'ids':(None, "1,2")
    }
    # 调用 requests 类的 post 方法,也就是 HTTP 的 POST 请求方式,
    # 访问了 url_search,其中通过将 payload 赋值给 data 完成 body 传参
    response_search = requests.post(url_search, data=payload)
    print('Response 内容:' + response_search.text)

    3.抽象

    提取公共部分,common.py

    import requests
    # 定义一个 common 的类,它的父类是 object
    class Common(object):
      # common 的构造函数
      def __init__(self,url_root):
        # 被测系统的跟路由
        self.url_root = url_root
      # get 请求,uri 是访问路由,params 是 get 请求的参数,如果没有默认为空
      def get(self, uri, params=''):
        # 拼凑访问地址
        url = self.url_root + uri + params
        # 通过 get 请求访问对应地址
        res = requests.get(url)
        # 返回 request 的 Response 结果,类型为 requests 的 Response 类型
        return res
      # post 方法,uri 是访问路由,params 是 post 请求需要传递的参数,如果没有参数这里为空
      def post(self, uri, params=''):    
        # 拼凑访问地址    
        url = self.url_root + uri    
        if len(params) > 0:    
          # 如果有参数,那么通过 post 方式访问对应的 url,并将参数赋值给 requests.post 默认参数 data   
          # 返回 request 的 Response 结果,类型为 requests 的 Response 类型   
          res = requests.post(url, data=params)    
        else:
          # 如果无参数,访问方式如下
          # 返回 request 的 Response 结果,类型为 requests 的 Response 类型
          res = requests.post(url) 
        return res

    修改getTest.py

    from common import Common
    url_root="http://127.0.0.1:8081/api/"
    uri='files/detail?id=1'
    # 实例化Common
    comm = Common(url_root)
    response_index = comm.get(uri)
    print('Response 内容:'+response_index.text)

    修改postTest.py

    from common import Common
    url_root="http://127.0.0.1:8081/api/"
    uri='files/searchByIds'
    payload = {
        'ids':(None, "1,2")
    }
    # 实例化Common
    comm = Common(url_root)
    response_search = comm.post(uri,payload)
    
    print('Response 内容:' + response_search.text)

    测试框架就是在测试脚本中不断抽象和封装得来的

      (1)不断写测试脚本

      (2)观察已写好的测试脚本,找出重复部分,进行封装

      (3)重复(1)、(2)

    4.支持Restful

    用java写restful接口

    package com.example.demo.controller;
    
    import com.example.demo.model.Users;
    import com.example.demo.repository.UsersRepository;
    import lombok.extern.slf4j.Slf4j;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.web.bind.annotation.*;
    
    import java.util.List;
    
    @Slf4j
    @RestController
    @RequestMapping("/user")
    public class UsersController {
    
        @Autowired
        UsersRepository usersRepository;
    
        @GetMapping("/list")
        public List<Users> list() {
    
            List<Users> users = usersRepository.findAll();
            return users;
        }
    
        /**
         * 新增
         */
        @PostMapping
        public Users add(@RequestBody Users user) {
            usersRepository.save(user);
            return user;
        }
    
        /**
         * 修改
         */
        @PutMapping
        public Users edit(@RequestBody Users user) {
            usersRepository.save(user);
            return user;
        }
    
        /**
         * 删除
         */
        @DeleteMapping("/{id}")
        public boolean remove(@PathVariable Integer id) {
            usersRepository.deleteById(id);
            return true;
        }
    
    }
    View Code

    重写common.py

    import requests
    # 定义一个 common 的类,它的父类是 object
    class Common(object):
        # common 的构造函数
        def __init__(self,url_root):
            # 被测系统的跟路由
            self.url_root = url_root
        # 封装get 请求,uri 是访问路由,params 是 get 请求的参数,如果没有默认为空
        def get(self, uri, params=''):
            # 拼凑访问地址
            url = self.url_root + uri + params
            # 通过 get 请求访问对应地址
            res = requests.get(url)
            # 返回 request 的 Response 结果,类型为 requests 的 Response 类型
            return res
        # 封装post 方法,uri 是访问路由,params 是 post 请求需要传递的参数,如果没有参数这里为空
        def post(self, uri, headers='',params=''):
            # 拼凑访问地址
            url = self.url_root + uri
            if len(params) > 0:
            # 如果有参数,那么通过 post 方式访问对应的 url,并将参数赋值给 requests.post 默认参数 data
            # 返回 request 的 Response 结果,类型为 requests 的 Response 类型
                res = requests.post(url, headers=headers,data=params)
            else:
            # 如果无参数,访问方式如下
            # 返回 request 的 Response 结果,类型为 requests 的 Response 类型
                res = requests.post(url, headers=headers)
            return res
        def put(self,uri, headers='',params=None):
            '''
            封装put 方法,uri 是访问路由,params 是 put 请求需要传递的参数,如果没有参数这里为空
            :param uri: 访问路由
            :param params: 传递参数,string 类型,默认为 None
            :return: 此次访问的 response
            '''
            url = self.url_root+uri
            if params is not None:
            # 如果有参数,那么通过 put 方式访问对应的 url,并将参数赋值给 requests.put 默认参数 data
            # 返回 request 的 Response 结果,类型为 requests 的 Response 类型
                res = requests.put(url, headers=headers, data=params)
            else:
            # 如果无参数,访问方式如下
             # 返回 request 的 Response 结果,类型为 requests 的 Response 类型
                res = requests.put(url)
            return res
    
        def delete(self,uri,params=None):
            '''
            封装delete 方法,uri 是访问路由,params 是 delete 请求需要传递的参数,如果没有参数这里为空
            :param uri: 访问路由
            :param params: 传递参数,string 类型,默认为 None
            :return: 此次访问的 response
            '''
            url = self.url_root + uri
            if params is not None:
            # 如果有参数,那么通过 delete 方式访问对应的 url,并将参数赋值给 requests.delete 默认参数 data
            # 返回 request 的 Response 结果,类型为 requests 的 Response 类型
                res = requests.delete(url, data=params)
            else:
            # 如果无参数,访问方式如下
            # 返回 request 的 Response 结果,类型为 requests 的 Response 类型
                res = requests.delete(url)
            return res

    getTest.py

    from common import Common
    url_root="http://127.0.0.1:8080"
    uri='/user/list'
    # 实例化Common
    comm = Common(url_root)
    response_index = comm.get(uri)
    print('Response 内容:'+response_index.text)

    postTest.py

    from common import Common
    import json
    url_root="http://127.0.0.1:8080"
    uri='/user'
    payload = "{"name": "EFG","age": 30}"
    headers = {
      'Content-Type': 'application/json'
    }
    # 实例化Common
    comm = Common(url_root)
    response_search = comm.post(uri,headers,payload)
    
    print('Response 内容:' + response_search.text)

    putTest.py

    from common import Common
    url_root="http://127.0.0.1:8080"
    uri='/user'
    payload = "{"id": 3,"age": 22,"name": "xyz"}"
    headers = {
      'Content-Type': 'application/json'
    }
    # 实例化Common
    comm = Common(url_root)
    response_search = comm.put(uri,headers,payload)
    
    print('Response 内容:' + response_search.text)

    delTest.py

    from common import Common
    url_root="http://127.0.0.1:8080"
    uri='/user/2'
    
    # 实例化Common
    comm = Common(url_root)
    response_search = comm.delete(uri)
    
    print('Response 内容:' + response_search.text)

    补充:

      加快框架的生成

        可以利用Postman 生成接口测试脚本

        改写通过工具导出的脚本

      https://gitee.com/babybeibeili/testFrame.git

  • 相关阅读:
    flask url_for后没有带端口号
    [Flask]通过render_form快捷渲染表单
    [Flask]使用sqlite数据库
    jmeter参数化读取数据进行多次运行
    eclipse 集成jdk
    创建一个gradle项目
    gradle的安装
    springmvc--jsp页面乱码
    APP专项测试使用到的工具
    robotframework实战三--自定义关键字
  • 原文地址:https://www.cnblogs.com/baby123/p/12836272.html
Copyright © 2011-2022 走看看