接口测试笔记二

落爺英雄遲暮 提交于 2020-05-08 16:46:45

上一篇

接口测试笔记一

为什么开发测试框架?

  测试工具的局限性

  维护成本的增加

这里使用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 生成接口测试脚本

    改写通过工具导出的脚本

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!