接口测试模块完整版

news2024/11/26 23:39:37

先上代码

#data_test.py
from openpyxl import load_workbook
class Date_test():
    @classmethod
    def Date_test_1(cls):
        """
        配置文件读取模块
        :return:
        """
        wb = load_workbook("data_test.xlsx")
        ws = wb["Sheet1"]
        url = 'http://localhost/api'
        list1 = []
        for i in range(1, ws.max_row + 1):
            list = []
            for j in range(1, ws.max_column + 1):
                if j == 3:
                    str = url + ws.cell(i, j).value
                else:
                    str = ws.cell(i, j).value
                list.append(str)
            list1.append(list)
        wb.close()
        Dict = {}
        for i in list1:
            str = ",".join(i)
            list = []
            list = str.split(",",1)
            Dict[list[0]] = list[1]
        return Dict
    def Date_test_2(self,test_function,test_text,x):
        """
        运行结果写入模块
        :param test_function:
        :param test_text:
        :param x:
        :return:
        """
        wb = load_workbook("data_test.xlsx")
        ws = wb["Sheet2"]
        ws.cell(x,1).value = test_function
        ws.cell(x,2).value = test_text
        wb.save("data_test.xlsx")
        wb.close()
 
 
    @staticmethod
    def Email_Date():
        username = "username"
        password = "password"
        To_Email = "from_email_1,from_email_2"
        return username,password,To_Email
#Http_pg.py
import requests
class HTTP_CONSOLE():
    def http_console(self,Method,url,parameter,Cookies= None):
        if Method == "POST":
            result = requests.get(url=url,params=parameter,cookies=Cookies)
        elif Method =="GET":
            result = requests.post(url=url,data=parameter,cookies=Cookies)
        else:
            print("请求方式输入错误,目前仅支持POST/GET两种请求方式!")
 
        return result
#test_case.py
from data_test import *
from Http_pg import *
import json
import unittest
class test_case(unittest.TestCase):
    @classmethod
    def setUp(cls):
        cls.Cookie = test_case().test_login()
    @classmethod
    def tearDown(cls):
        print("测试用例执行完毕")
 
    def test_register(self):
        str = Date_test.Date_test_1()["register"]
        list = str.split(",")
        Method = list[0]
        url = list[1]
        Dict_login = {}
        Dict_login["mobilephone"] = eval(list[2])
        Dict_login["pwd"] = eval(list[3])
        result = HTTP_CONSOLE().http_console(Method=Method, url=url, parameter=Dict_login)
        Date_test().Date_test_2(test_function="register",test_text=json.loads(result.text)["msg"],x=1)
        # self.assertEqual(json.loads(result.text)["msg"],"注册成功")
        self.assertEqual(json.loads(result.text)["msg"],"手机号码已被注册")
 
 
    def test_login(self):
        str = Date_test.Date_test_1()["login"]
        list = str.split(",")
        Method = list[0]
        url = list[1]
        Dict_login= {}
        Dict_login["mobilephone"] = eval(list[2])
        Dict_login["pwd"] = eval(list[3])
        result = HTTP_CONSOLE().http_console(Method=Method,url=url,parameter=Dict_login)
        self.Cookie = result.cookies
        Date_test().Date_test_2(test_function="login", test_text=json.loads(result.text)["msg"],x=2)
        self.assertEqual(json.loads(result.text)["msg"],"登录成功")
        return self.Cookie
 
    def test_recharge(self):
        str = Date_test.Date_test_1()["recharge"]
        list = str.split(",")
        Method = list[0]
        url = list[1]
        Dict_login = {}
        Dict_login["mobilephone"] = eval(list[2])
        Dict_login["amount"] = eval(list[3])
        result = HTTP_CONSOLE().http_console(Method=Method, url=url, parameter=Dict_login,Cookies = self.Cookie)
        Date_test().Date_test_2(test_function="recharge", test_text=json.loads(result.text)["msg"], x=3)
        self.assertEqual(json.loads(result.text)["msg"], "充值成功")
 
    def test_withdraw(self):
        str = Date_test.Date_test_1()["withdraw"]
        list = str.split(",")
        Method = list[0]
        url = list[1]
        Dict_login = {}
        Dict_login["mobilephone"] = eval(list[2])
        Dict_login["amount"] = eval(list[3])
        result = HTTP_CONSOLE().http_console(Method=Method, url=url, parameter=Dict_login,Cookies = self.Cookie)
        Date_test().Date_test_2(test_function="withdraw", test_text=json.loads(result.text)["msg"], x=4)
        self.assertEqual(json.loads(result.text)["msg"], "取现成功")
 
if __name__ == '__main__':
    unittest.main()
#Email_test.py
import HTMLTestRunnerNew
from email.mime.text import MIMEText
from email.header import Header
import smtplib
import unittest
import os
from data_test import *
from email.mime.multipart import MIMEMultipart
 
 
class Email_Console():
    def __init__(self):
        self.username, self.password, self.To_Email = Date_test.Email_Date()
 
    def send_main(self, file_new):
        """
        发送邮件方法
        :param file_new:
        :return:
        """
        msg = MIMEMultipart("Emaik_TestText")
        msg['Subject'] = Header('自动化测试报告', 'utf-8')
        msg['From'] = self.username
        msg['To'] = self.To_Email
        with open(file_new, 'rb') as f:
            mail_body = f.read()
            msg.attach(MIMEText(mail_body, 'html', 'utf-8'))
 
        with open("result.html", "rb") as f:
            mail_attach = f.read()
            att1 = MIMEText(mail_attach, 'base64', 'utf-8')
            att1["Content-Type"] = 'application/octet-stream'
            att1["Content-Disposition"] = 'attachment; filename="report_test.html"'
            msg.attach(att1)
        with open("data_test.xlsx","rb") as f:
            mail_attach = f.read()
            att2 = MIMEText(mail_attach, 'base64', 'utf-8')
            att2["Content-Type"] = 'application/octet-stream'
            att2["Content-Disposition"] = 'attachment; filename="data_test.xlsx"'
            msg.attach(att2)
        try:
            smtp = smtplib.SMTP()
            smtp.connect("smtp.163.com", 25)
            smtp.login(self.username, self.password)
            smtp.sendmail(self.username, self.To_Email.split(","), msg.as_string())
            smtp.quit()
        except Exception as e:
            print("Send Email Failed!!!")
            raise e
 
    def new_report(self, testreport):
        """
        生成并查找查找最新测试报告方法
        :param testreport:
        :return:
        """
        # 生成测试用例
        fp = open("result.html", 'wb')
        runner = HTMLTestRunnerNew.HTMLTestRunner(stream=fp, title='2019年4月9日前程贷接口测试报告', description='所有测试情况',
                                                  tester="桂马")
        discove = unittest.defaultTestLoader.discover(".", pattern="test_*.py")
        runner.run(discove)
        fp.close()
        # 查找测试用例
        lists = os.listdir(testreport)
        lists.sort(key=lambda fn: os.path.getmtime(testreport + "\\" + fn))
        file_new = os.path.join(testreport, lists[-1])
        print(file_new)
        return file_new
 
 
if __name__ == "__main__":
    email_test = Email_Console()
    file_path = email_test.new_report(os.getcwd())  # 查找新生的报告
    email_test.send_main(file_new=file_path)  # 调用发邮件模块

data_test.xlsx文件中Sheet1

         Sheet2

注意点:

    1.setUp中获取返回cookies值算不上用得好,只能算面前能用,其他方法还有修改TestCase模块中默认值,添加self.Cookie这个值,然后直接用,但我不怎么想使用这个方法,所以放弃了

后记:

    后续会陆续更新test_case文件中的测试用例,多写自然就熟悉了


🎁更多干货


完整版文档下载方式:

这些资料,对于从事【软件测试】等相关工作的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!以上均可以分享。

在评论区和我互动交流或者私❤我【软件测试学习】领取即可,拿走不谢。


如果我的博客对你有帮助、如果你喜欢我的博客内容,请 “👍点赞” “✍️评论” “💙收藏” 一键三连哦!

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/742574.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

第五节 配置SpringBootAdmin电子邮件通知

本来想用一节就写完SpringBootAdmin的,但随着研究的深入发现一节应该是不够的,网上的资料也不会非常系统,官网的例子有些已经好几年没更新了,所以接下来还是系统性的来写下吧 第一节 完成基础配置,暴露所有端点 第二节…

智能机器人嵌入ChatGPT会给社会带来哪些进步

智能机器人技术在当今世界中扮演着越来越重要的角色,而其中一个令人印象深刻的例子就是ChatGPT。ChatGPT是一种基于人工智能的对话系统,它利用强大的自然语言处理和生成模型,可以与人类进行自然而流畅的对话。ChatGPT内置了智能机器人技术&am…

哈达玛矩阵乘法

哈达玛矩阵乘法 作者: 赵晓鹏时间限制: 1S章节: 递归与分治 输入说明 : 见问题描述。 输出说明 : 见问题描述。 输入范例 : 1 4 -6 输出范例 : -2 10 #include <iostream> #include <vector> using namespace std; vector<int>res; void cal(int len…

汽车EBSE测试流程分析(三):通过系统调研确定改进方案

EBSE专题连载共分为“五个”篇章。此文为该连载系列的“第三”篇章&#xff0c;在之前的“篇章&#xff08;二&#xff09;”中已经分析了EBSE步骤一&#xff1a;关于优势和挑战的案例研究。在本篇章&#xff08;三&#xff09;中&#xff0c;我们将结合具体研究实践&#xff0…

TikTok小店运营必看攻略!

众所周知&#xff0c;国内的抖音早已风生水起&#xff0c;抖音给了很多普通人一夜暴富的机会。而Tiktok也跟随着抖音开启了商业模式&#xff0c;目前流量与机会都是不可小觑的。在店铺申请通过&#xff0c;成功入驻之后&#xff0c;又该如何运营&#xff1f;这篇文章为大家解答…

小程序自定义海报

如图微信小程序生成海报自定义调整位置 //微信小程序组件 poster.wxml<view styleposition: relative;{{customStyle}};{{painterStyle}}><block wx:if"{{!use2D}}"><canvas canvas-id"photo" style"{{photoStyle}};position: absolut…

揭开液体活检技术的神秘面纱

液体活检&#xff08;liquid biopsy&#xff09;是新兴的肿瘤诊断技术&#xff0c;与传统检测手段相比具有创伤性小、取样便捷、可实时动态检测等优势&#xff0c;在肿瘤早期筛查、分子分型、复发监测和预后评估等方面起到重要作用。 图 1 与传统的组织活检相比&#xff0c;液…

路径规划算法:基于爬行动物优化的路径规划算法- 附代码

路径规划算法&#xff1a;基于爬行动物优化的路径规划算法- 附代码 文章目录 路径规划算法&#xff1a;基于爬行动物优化的路径规划算法- 附代码1.算法原理1.1 环境设定1.2 约束条件1.3 适应度函数 2.算法结果3.MATLAB代码4.参考文献 摘要&#xff1a;本文主要介绍利用智能优化…

【分布式应用】Filebeat+ELK 部署、logstash filter四大过滤插件

目录 一、 FilebeatELK 部署1.1在 Filebeat 节点上操作1.1.1安装 Filebeat1.1.2设置 filebeat 的主配置文件1.1.3 在 Logstash 组件所在节点上新建一个 Logstash 配置文件1.1.4浏览器访问测试 二 、filter四大插件2.1grok 正则捕获插件2.1.1内置正则表达式调用 2.2logstash 官方…

操作系统——输入输出IO管理

文章目录 **1 I/O管理概述****1.1 I/O设备****1.2 I/O控制方式****1.2.1 程序直接控制方式****1.2.2 中断驱动方式****1.2.3 DMA方式****1.2.4 通道控制方式** **1.3 I/O软件层次结构****1.4 应用程序I/O接口** **2 设备独立性软件****2.1 高速缓冲与缓冲区****2.2 设备分配和回…

车牌识别--http协议

文章目录 libcurl车牌识别 前言 基于https协议访问网址实现车牌识别 http是超文本传输协议&#xff0c;它可以在B/S模式下解决tcp传输格式的问题&#xff0c;处于tcp之上在应用层 https是http加密版本&#xff0c;通过httpssl实现加密版http 我们车牌识别通过http协议调用翔云…

Django_admin数据管理后台

目录 一、基础操作 二、自定义后台操作数据行为 源码等资料获取方法 admin数据管理后台是django内置的一个后台管理界面&#xff0c;能查看已注册模型类的数据结构&#xff0c;以及对数据的增删改。 一、基础操作 1.1 检查项目目录下的urls.py有没有如下配置 1.2 创建djan…

使用U盘在无系统的机器上安装Ubuntu

1、在Bios中选择将USB 作为Boot Option #1 2、插入制作好的系统盘&#xff08;系统盘制作可以看上一篇博客&#xff09; 3、save & exit选择 save change and reset 4、 开始安装系统 如果出现安装窗口过大无法点击下一步&#xff0c;可以使用ALTF7拖动窗口。

java中的BIO NIO AIO

多路复用IO模型是目前使用的比较多的模型。java中的NIO常用的理解是在 网络IO中&#xff0c;那么在网络IO中为什么NIO比BIO效率更高&#xff1f;我们的web项目中是用的哪种呢&#xff1f;可以往下看。 JavaNIO实际上就是多路复用IO。在多路复用IO模型中&#xff0c;会有一个线程…

【Unity】Unity2022设置2D动画的sample

首先在主页面选择Animation 出现这样的一个框 点击红点行&#xff0c;最右侧的三个点 将Show Sample Rate勾选上即可

Fiddler工具 — Fiddler常用插件(Willow)

Fiddler已有的功能已经够我们日常工作中使用了&#xff0c;为了更好的扩展Fiddler&#xff0c;Fiddler也是支持一些插件的安装&#xff0c;也支持用户自己开发插件并安装。 Fiddler插件下载地址&#xff1a;https://www.telerik.com/fiddler/add-ons 1、Traific Difer插件 Tr…

【Java】Map(包括HashMap)

Map HashMap 和 Hashtable 的区别HashMap 和 HashSet 区别HashMap 的底层实现JDK1.8 之前JDK1.8红黑树 HashMap 的长度为什么是 2 的幂次方HashMap 多线程操作导致死循环问题HashMap 为什么线程不安全&#xff1f; ConcurrentHashMapConcurrentHashMap 和 Hashtable 的区别JDK …

常见面试题之JVM实践(调优)

1. JVM调优的参数可以在哪里设置参数值&#xff1f; 1.1 tomcat的设置vm参数 修改TOMCAT_HOME/bin/catalina.sh文件&#xff0c;如下图&#xff1a; JAVA_OPTS"-Xms512m -Xmx1024m" 1.2 springboot项目jar文件启动 通常在linux系统下直接加参数启动springboot项…

在Pandas中处理缺失数据

当没有为一个或多个项目或整个单元提供信息时&#xff0c;可能会出现数据缺失。缺失数据在现实生活中是一个非常大的问题。缺失数据在pandas中也可以称为NA&#xff08;不可用&#xff09;值。在DataFrame中&#xff0c;有时许多数据集只是缺少数据&#xff0c;因为它存在而未被…

52 # 二叉树的前中后遍历

二叉树的遍历 线性数据结构遍历比较简单&#xff0c;可以采用正序遍历、逆序遍历。 遍历树的目的一般是修改树&#xff0c;比如修改树的节点&#xff0c;采用访问者模式 前序遍历 前序遍历&#xff08;preorder traversal&#xff09;&#xff1a;先访问根节点&#xff0c;…