接口项目实战

38 篇文章 6 订阅
6 篇文章 0 订阅


1.Excel文件内容

login1.xlsx
process.xlsx

2.目录结构

目录结构

3.接口项目文件

# httpclient.py
# 专门封装getpost请求方式
import json

import allure
import requests


class HttpClient:
    # 只要用post,get请求方式 就创建会话
    def __init__(self):
        self.session = requests.Session()

    # 发送请求 请求方式, 接口地址,接口参数类型,接口数据,头部,其他信息
    # 判断 你要发送的是请求方式 如果get post
    # post请求参数类型 json data
    @allure.step('发送{method}请求')
    def send_request(self,method,url,param_type=None,data=None,headers = None,**kwargs):
        # 请求方式转成大写
        method = method.upper()
        param_type = param_type.upper()
        print(method)
        requestHeaders = None
        if headers is not None:
            requestHeaders = json.loads(headers)
        if method == 'GET':
            if param_type == 'url':
                requestUrl = '%s%s'%(url,"" if data is None else data)
                response = self.session.request(method=method,url=requestUrl,headers = requestHeaders,**kwargs)
            else:
                response = self.session.request(method=method,url=url,params = data,headers = requestHeaders,**kwargs)

        elif method == 'POST':
            if param_type == 'FORM':
                response = self.session.request(method = method,url = url,data=data,**kwargs)
            else:
                # requestData = eval(data)
                requestData = json.loads(data)
                response = self.session.request(method = method,url = url,json=requestData,headers=requestHeaders,**kwargs)
            pass
        elif method == 'DELETE':
            if param_type == 'FORM':
                response = self.session.request(method = method,url = url,data=data,**kwargs)
            else:
                response = self.session.request(method = method,url = url,json=data,**kwargs)
        elif method == 'PUT':
            if param_type == 'FORM':
                response = self.session.request(method = method,url = url,data=data,**kwargs)
            else:
                response = self.session.request(method = method,url = url,json=data,**kwargs)
        else:
            raise ValueError
        return response

    # 魔法方法 send_request 实例化类.方法名
    # 实例化类 HttpClient(),send_request()
    # a = HttpClient()
    def __call__(self,method,url,param_type,data=None,headers = None,**kwargs):
        return self.send_request(method,url,param_type,data,headers = headers,**kwargs)

    def close_session(self):
        self.session.close()

# excel_read.py
# 有数据
# 2.读取excel里面的数据

import openpyxl

class excelData:
    def getExcel(self,filename):
        # 找工作簿
        workbook = openpyxl.load_workbook(filename)
        # 表单 指定表单
        sheet = workbook['Sheet1']
        # 拿里面的数据 循环数据
        rows_sheet = sheet.iter_rows()
        print(rows_sheet)
        list2 = []
        for item in rows_sheet:
            # print(item)
            if item[0].value == 'id':
                continue
            # print(item)
            # 这些值在元组里面的值,放在列表 4个学员 散的 拿出来的数据 会给别的文件用
            # 测试 测试用例 一个文件夹 测试数据 4个学员 给他们
            # 再定义一个空列表 班级 装了4个学员 只要拿到班级 拿到所有的学员
            # list2放在循环里面和放在循环外面有区别的,要整个循环结束之后 拿到所有学员
            # 之后才把他们一起放到列表中去
            # 循环里面 循环第一次 列表有数据 循环第二遍 又重新创建一个列表
            # 循环体结束了,代表整个循环结束了
            list1 = []
            for col in item:
                list1.append(col.value)
            list2.append(list1)
        # print(list2)
        return list2
# 把excel里面所有的值都拿出来了,为了后面好使用,封装起来
# 实例化类 方法 多断点 看一下数据是怎么放置进去列表中的
if __name__ == '__main__':
    a = excelData().getExcel('../data/process.xlsx')
    print(a)

# 1.已经把excel里面的数据拿到了
# 2,测试数据 测试登录 测试用例 正常情况 异常情况

# login_test.py
# 测试excel里面的数据
# 知识点 写这块 比较友好 读取数据测试
# 测试数据 做登录测试 用什么知识点 pytest/unittest 单元测试框架 自动化里面写用测试用例的
# 用代码去写测试用例 测试 unittest / pytest 管理用例 参数化 unittest / pytest
# 从yaml文件中拿到数据 excel文件中拿到数据 惊喜 生成测试报告
# 测试登录 登录数据拿到 拿到数据
# 拿到登录数据 发送请求 写过一次封装请求
import allure
import openpyxl
import pytest

from class43.base.httpclient import HttpClient
from class43.lib.excelRead import excelData


class TestCase:
    @pytest.mark.parametrize('case',excelData().getExcel('./data/login1.xlsx'))
    def test_commonapi(self,case):
        # print('wwwwww',case)
        if case[7] is not  None:
            allure.dynamic.feature(case[7])
        if case[8] is not None:
            allure.dynamic.story(case[8])
        if case[9] is not None:
            allure.dynamic.title(case[9])
        if case[10] is not None:
            allure.dynamic.description(case[10])
        if case[11] is not None:
            allure.dynamic.severity(case[11])
        id = case[0]
        url = case[1]
        body = case[2]
        method = case[3]
        param_type = case[4]
        expect = case[5]
        httpclient = HttpClient()
        # 发送请求 传参 参数哪里来? excel里拿?
        # 我们要的参数已经拿到了 做接口测试
        # method,url,param_type=None,data=None,headers = None,**kwargs
        # 发送请求 发送失败 怎么办? 打个断点
        common = httpclient(method = method,url = url,param_type=param_type,data = body)
        # 打印结果 4个接口都获得了 结果 不清楚为什么会出现问题 调试
        print(common.json())
        dict_expect = eval(expect)
        try:
            assert dict_expect == common.json()
            rel = '用例成功'
        except Exception as e:
            rel = '用例失败'

        workbook = openpyxl.load_workbook('./data/login1.xlsx')
        sheet = workbook['Sheet1']
        # 数据写进去
        sheet.cell(id+1,7).value=rel
        workbook.save('./data/login1.xlsx')
if __name__ == '__main__':
    pytest.main(['-sv','login_test.py'])

# 登录成功 生成测试报告

# process_test.py
# 测试excel里面的数据
# 知识点 写这块 比较友好 读取数据测试
# 测试数据 做登录测试 用什么知识点 pytest/unittest 单元测试框架 自动化里面写用测试用例的
# 用代码去写测试用例 测试 unittest / pytest 管理用例 参数化 unittest / pytest
# 从yaml文件中拿到数据 excel文件中拿到数据 惊喜 生成测试报告
# 测试登录 登录数据拿到 拿到数据
# 拿到登录数据 发送请求 写过一次封装请求
import allure
import openpyxl
import pytest

from class43.base.httpclient import HttpClient
from class43.lib.excelRead import excelData


class TestCase:
    @pytest.mark.parametrize('case',excelData().getExcel('../data/process.xlsx'))
    def test_commonapi(self,case):
        id = case[0]
        url = case[1]
        body = case[2]
        headers = case[3]
        method = case[4]
        param_type = case[5]
        expect = case[6]
        print('wwwwww',case)
        httpclient = HttpClient()
        # 发送请求 传参 参数哪里来? excel里拿?
        # 我们要的参数已经拿到了 做接口测试
        # method,url,param_type=None,data=None,headers = None,**kwargs
        # 发送请求 发送失败 怎么办? 打个断点
        common = httpclient(method = method,url = url,param_type=param_type,data = body,headers=headers)
        # 打印结果 4个接口都获得了 结果 不清楚为什么会出现问题 调试
        print(common.json())
        dict_expect = eval(expect)
        try:
            assert dict_expect == common.json()
            rel = '用例成功'
        except Exception as e:
            rel = '用例失败'

        workbook = openpyxl.load_workbook('../data/process.xlsx')
        sheet = workbook['Sheet1']
        # 数据写进去
        sheet.cell(id+1,8).value=rel
        workbook.save('../data/process.xlsx')
if __name__ == '__main__':
    pytest.main(['-sv','process_test.py'])

# 登录成功 生成测试报告
# 1.接口响应返回来的值,保存在变量中,所有数据的变量
# 2.从excel 麻烦一点 再标记一下 你要取的值 jsonpath uservar $..msg

# run.py
import os

import pytest


if __name__ == '__main__':
    pytest.main(['-sv','./test_case/login_test.py','--alluredir','allure-results','--clean-alluredir'])
    os.system('allure serve allure-results')

# 单接口测试
# excel做接口关联
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

司小幽

真诚赞赏,手留余香。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值