接口测试笔记二

上一篇

接口测试笔记一

为什么开发测试框架?

  测试工具的局限性

  维护成本的增加

这里使用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

posted @   慕尘  阅读(223)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
历史上的今天:
2019-05-06 mysql查询之 连续出现的数字,重复出现的邮箱,删除重复的电子邮箱
2019-05-06 mysql查询之分数排名
2019-05-06 mysql查询之获取第n高薪水
点击右上角即可分享
微信分享提示