目录:导读
前言
传统软件测试行业是以手工测试为主,也就是所谓的点点点,加上国内软件公司不注重测试,受制于大环境影响等也就给了大众一种测试人员虽然身处互联网行业,却是毫无技术可言的工种。
话锋一转,到了如今,不得不说一声:大人,时代变了,最直观的表现莫过于招聘要求的提高,越来越要求测试人员拥有七十二变的能力。
而在这其中,自动化测试能力是现在手工测试迈向更高技术岗位的必经之路。
搭建接口测试框架
构建接口测试思维:
当前互联网产品最大的特点就是快,上线周期通常是以"天"甚至是以"小时"为单位,而传统软件产品的周期多以"月",甚至以"年"为单位。因此,如何在保证产品质量下,有效缩短测试回归时间成了重中之重。
两个突破口:
引入测试的并发执行,即从以往的串行执行测试用例,采用分布式的方法并行执行。
从测试策略上找到突破口,从传统软件产品的金字塔测试策略往菱形测试策略转变。以接口测试为主,GUI测试为辅,单元测试则根据公司实际情况进行。
四点建议:
以中间层的API测试为重点做全面的测试;
轻量级的GUI测试,只覆盖最核心直接影响主营业务流程的E2E场景;
最上层的GUI测试通常利用探索式测试思维,以人工测试的方式发现尽可能多的潜在问题;
单元测试只对那些相对稳定并且核心的服务和模块开展全面的单元测试,而应用层或者上层业务只会做少量的;
为何要搭建测试框架?
开发自己的框架更能结合自身工作中的痛点,难点来做一个针对性的解决,使其扩展性更高,后期也能接入CI/CD。
利用现有工具来进行接口测试,随着项目的规模变大,维护成本将会增大,不利于管控。
工具本身具有一定的局限性,如支持的协议比较单一。
不用纠结技术选型,根据自身的技术实力和技术功底来选择,而不要以开发工程师的技术栈来选择。
定义专属框架目录结构
test_case:存放测试用例
test_data:存放测试数据
report:存放测试报告
common:存放公共方法
lib:存放第三方库
config:存放环境配置信息
main:框架主入口
fixture:类似unittest中的setUp/tearDown的存在,但功能远比他们强大
构建框架流程
在框架构建过程中,由于篇符有限,本文只涉及其中部分环节。
1、在common公共模块、封装定义框架专属的http请求能力
# !/usr/bin/python3
# -*- coding: utf-8 -*-
# @Author: pan-li
import requests
class HttpRequests(object):
def __init__(self, url):
self.url = url
self.req = requests.session()
# 自定义请求头,根据自身所在公司项目需求
self.headers = {
'Content-Type': 'application/json', 'User-Agent': 'Node midway-v2x Version/1.28.1'}
# 封装get请求
def get(self, url='', params='', data='', headers=None, cookies=None):
response = self.req.get(url=url, params=params, data=data, headers=headers, cookies=cookies)
return response
# post请求
def post(self, url='', params='', data='', headers=None, cookies=None):
response = self.req.post(url=url, params=params, data=data, headers=headers, cookies=cookies)
return response
# put请求
def put(self, url='', params='', data='', headers=None, cookies=None):
response = self.req.put(url=url, params=params, data=data, headers=headers, cookies=cookies)
return response
# delete请求
def delete(self, url='', params='', data='', headers=None, cookies=None):
response = self.req.delete(url=url, params=params, data=data, headers=headers, cookies=cookies)
return response
2、抽离URL生成url_conf.py在config文件中
import enum
class URLConf(enum.Enum):
TEST_URL = 'http://10.12.7.20:8443/v2x-omp/api/'
3、编写接口测试用例在test_case文件中,第一版测试用例,安装pytest,pip install -U pytest
import os
import sys
import pytest
import json
from common.http_requests import *
from config.url_conf import URLConf
project_root = os.path.dirname(os.path.dirname(os.path.realpath(__file__)))
sys.path.append(project_root)
class TestV2x:
@classmethod
def setup_class(cls) -> None:
cls.url = URLConf.TEST_URL.value
cls.http = HttpRequests(cls.url)
def setup(self) -> None:
self.headers = {
'Content-Type': 'application/json', 'User-Agent': 'Node midway-v2x Version/1.28.1'}
self.http = HttpRequests(self.url)
def