unittest 框架-待优化
模块1 :getdata.py 读取测试用例test_case.xlsx,返回测试用例结果
import json
from openpyxl import load_workbook
class DoExcel:
"""
:get_data 读取execl中的测试数据
:write_data 将测试结果写入excel中
""" def get_data(self):
"""读取excel中的登录信息存储到列表中"""
wb = load_workbook("test_case.xlsx")
sheet = wb["test_case"] login_data=[]
print(sheet.max_row) for row in range(2,sheet.max_row+1):
user={"url":sheet.cell(row,5).value,
"method":sheet.cell(row,4).value,
# "data": sheet.cell(row, 6).value,
"data": json.loads(sheet.cell(row, 6).value),
"exp_result":sheet.cell(row,7).value,
"case_id": sheet.cell(row, 1).value
}
login_data.append(user)
wb.close()
return login_data def write_result(self,row,result):
"""将测试结果返回到excel中"""
wb = load_workbook("test_case.xlsx")
sheet = wb["test_case"]
sheet.cell(row,8,result)
wb.save("test_case.xlsx")
wb.close()
if __name__ == '__main__':
res=DoExcel().get_data()
print(res)
模块2 :httprq.py 获取login的请求信息
import requests
class HttpRequest:
"""完成http的get请求或post请求
:method 请求方法 可以是get or post
:url 请求地址
:data 请求参数,字典的格式 """
def http_request(self,url,method,data):
if method.lower()=="get":
return requests.get(url,params=data)
elif method.lower()=="post":
return requests.post(url,data=data) if __name__ == '__main__':
t=HttpRequest().http_request("http://47.107.168.87:8080/futureloan/mvc/api/member/login",
"get",
{"mobilephone":"", "pwd":123456})
print(t.json())
print(t.text)
模块3 :logintest.py 编写测试用例
import unittest from ddt import ddt, data, unpack
from httprq import HttpRequest
from homework.ddt_20190323.unittest_ddt_exl_http_request.getdata import * @ddt
class Testlogin(unittest.TestCase):
"""通过ddt将excel中获取的数据循环赋值到data"""
@data(*DoExcel().get_data())
@unpack
def test_httprq(self,method,data,url,exp_result,case_id):#方法名必须以test开头
res=HttpRequest().http_request(url,method,data).json()#http请求的实际值
try:
self.assertEqual(exp_result,res["msg"])#断言,实际值与预期值进行对比
row=case_id+1
DoExcel().write_result(row,"pass") #通过,excel中返回pass
except Exception as e:#捕获异常
row=case_id+1
DoExcel().write_result(row,"fail")#不通过,excel中返回fail
raise Exception #抛出异常
模块4 :runtest.py 执行测试用例,生成测试报告
import unittest
from homework.ddt_20190323.unittest_ddt_exl_http_request import testlogin
import HTMLTestRunnerNew
class RunCase:
"""
:test_suite_html 执行测试用例后生成html的测试报告
:test_suite_module 按test_module来执行测试用例
:test_suite_testcase 按照测试用例类来执行测试用例
""" def test_suite_html(self):
"""
测试步骤:新建一个用例收集器
新建一个用例加载器
suit.addTest()通过加载测试模块来收集用例
新建一个html文档来存放测试报告 :return:
"""
suite=unittest.TestSuite()
loader=unittest.TestLoader()
suite.addTest(loader.loadTestsFromModule(testlogin)) with open ("login_http.html","wb") as file:
runner=HTMLTestRunnerNew.HTMLTestRunner(stream=file,
verbosity=2,#生成报告级别
title="login测试报告",
description="验证登录是否成功",
tester="七月")#创建一个对象来执行测试用例
runner.run(suite)#执行收集器中的所有测试用例 def test_suite_module(self):
suite=unittest.TestSuite()#用例收集器
loader=unittest.TestLoader()#用例加载器
runner=unittest.TextTestRunner(verbosity=0)#用例执行器
suite.addTest(loader.loadTestsFromModule(testlogin))#收集测试用例
runner.run(suite)#执行测试用例
if __name__ == '__main__':
RunCase().test_suite_html()
# RunCase().test_suite_module()
5、sendemail.py发送测试报告邮件
import smtplib from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.header import Header
from configparser import ConfigParser
from email.mime.image import MIMEImage class SendMail:
def sent_mail(self):
# 第三方smtp服务
mail_host = "smtp.qq.com" # 设置服务器 # 获取发件箱的登录名,登录密码
cp=ConfigParser()
cp.read("user_pwd.config",encoding="utf-8")
mail_user = cp.get("userinfo","emailname")
mail_pass = cp.get("userinfo","emailpwd") # 配置文件中获取发件地址,收件地址
sender=cp.get("userinfo","emailname")
receivers=[cp.get("userinfo","emailname")] # 创建一个带附件,带图片的邮件实例,添加邮件主题,发件人,收件人
message=MIMEMultipart("mixed")
subject = "Python SMTP 邮件测试"
message["Subject"] = Header(subject,"utf-8")
message["From"] = Header("七月","utf-8")
message["To"] = Header("七月","utf-8") # 添加附件1、test_case.xlsx
with open("test_case.xlsx","rb") as attach_msg1:
attach1 = MIMEText(attach_msg1.read(),"plain","utf-8")
attach1["Content-Type"] = "application/octet-stream"
attach1["Content-Disposition"] = "attachment;filename='test_case.xlsx'"
message.attach(attach1) # 添加附件2、login_http.html
with open("login_http.html", "rb") as attach_msg2:
attach2 = MIMEText(attach_msg2.read(), "html", "utf-8")
attach2["Content-Type"] = "application/octet-stream"
attach2["Content-Disposition"] = "attachment;filename='login_http.html'"
message.attach(attach2) # 添加邮件正文
with open("login_http.html", "rb") as attach_msg2:
mail_msg =attach_msg2.read()
message_con = MIMEText(mail_msg, "html", "utf-8")
message.attach(message_con) try:
server = smtplib.SMTP(mail_host,25) # 创建邮件服务商
server.login(mail_user,mail_pass) # 登录邮箱
server.sendmail(sender,receivers,message.as_string()) # 发送邮件
print("邮件发送成功")
except smtplib.SMTPException :
print("Error:邮件发送失败")
if __name__ == '__main__':
SendMail().sent_mail()
unittest 框架-待优化的更多相关文章
- unittest框架(惨不忍睹低配版)
根据我上个随笔的unittest框架优化得来,虽然对于smtp模块还是有点迷糊,不过还是勉强搭建运行成功了,还是先上代码: #login_test.py import requests class L ...
- selenium + python自动化测试unittest框架学习(二)
1.unittest单元测试框架文件结构 unittest是python单元测试框架之一,unittest测试框架的主要文件结构: File >report >all_case.py &g ...
- python+unittest框架第一天unittest之简单认识Test Fixure:测试固件【8月17更新】
20万的慢慢会实现的吧,hhh unittest框架,我就不在介绍了,百度有很详细的介绍. 我们只要了解: 1.unittest是单元测试框架 2.它提供用例组织与执行:在实际工作中案例可能有上百条, ...
- selenium-webdriver(python) (十六) --unittest 框架
学习unittest 很好的一个切入点就是从selenium IDE 录制导出脚本.相信不少新手学习selenium 也是从IED 开始的. IDE学习参考: 菜鸟学自动化测试(一)----selen ...
- Selenium2+python自动化30-引入unittest框架
from selenium import webdriverfrom selenium.webdriver.common.by import Byfrom selenium.webdriver.com ...
- unittest 框架
unittest 框架 学习unittest 很好的一个切入点就是从selenium IDE 录制导出脚本.相信不少新手学习selenium 也是从IED 开始的. IDE学习参考: 菜鸟学自动化测试 ...
- unittest框架概要
unittest是Python语言自带的单元测试框架,原名PyUnit. 认识unittest 在unittest框架中有4个重要概念:test fixture.test case.test suit ...
- 接口登录CSDN发布博客---封装方法,使用unittest框架
一个简单的跑接口流程:登录后发表带图片的博客.这里涉及到的知识点: 1.登录时通过cookies去保持登录状态,把cookies添加到一个session中,这样可以保持长时间登录状态: 2.我们通过爬 ...
- 记录python接口自动化测试--unittest框架基本应用(第二目)
在第一目里写了几个简单demo,并把调用get和post请求的方法封装到了一个类里,这次结合python自带的unittest框架,用之前封装的方法来写一个接口测试demo 1.unittest简单用 ...
随机推荐
- 第二章 Linux目录学习
Linux 目录结构相对windows来说更简单,Linux 目录 以 斜杠 / 为根目录,其整体结构是以/为根的树状结构. 使用 tree -L 1 查看1级目录结构 /bin 常用的二进制命令目录 ...
- Spring boot入门(三):SpringBoot集成结合AdminLTE(Freemarker),利用generate自动生成代码,利用DataTable和PageHelper进行分页显示
关于SpringBoot和PageHelper,前篇博客已经介绍过Spring boot入门(二):Spring boot集成MySql,Mybatis和PageHelper插件,前篇博客大致讲述了S ...
- H3C交换机S5500划分VLAN
好记性不如烂笔头! H3C交换机S5500划分VLAN 将H3C S5500换机现在需要分三网段,分别是VLAN14,VLAN15,VLAN16,交换机中默认全部口是VLAN1. H3 ...
- Admin Console 反应慢的相关bug
一个常见问题是在 Admin console 刷新 server 列表时,页面反应慢.从 Admin Server 的 Thread Dump 可以看到 Admin server 到 Managed ...
- Salesforce的对象和字段
对象 Salesforce默认提供了很多功能,可以用于销售.市场开发.客服等.为了实现这些功能,Salesforce提供了一系列的标准对象,比如"客户"(Account).&quo ...
- C# 离线人脸识别Demo 使用ArcFace 2.0开发完成
环境: win7以上 VS2013以上 sdk版本:ArcFace v2.0 x86 x64平台Debug.Release配置都已通过编译 下载地址:https://github ...
- docker 集群 zookeeper 碰到 java.net.NoRouteToHostException: Host is unreachable (Host unreachable)
最近在学 zookeeper ,按照 docker 官网的方式集群 zookeeper , 然后发现有路由找不到.最后问题解决了,随手记录下来. 原因是 firewalld 的没有信任 docker ...
- Testlink1.9.17使用方法(第二章 登录&汉化设置)
第二章 登录&汉化设置 QQ交流群:585499566 1,使用超级账户admin/admin登录. 2,登录后,会提示创建一个新的项目,先不要创建,先进入用户管理,设置成中文显示,也就是汉化 ...
- 关于ORACLE数据库名以及数据实例名等几个重要概念
在Oracle中有关数据库和数据库实例的几个重要概念,有时候如果理解不是很深或者对其疏忽.混淆了,还真容易搞错或弄不清其概念,下面就数据库实例名.数据库名.数据库域名.数据库服务名.全局数据库名几个概 ...
- Windows系统在本地配置一个apache域名的方法
我使用的xampp 1.修改C:\Windows\System32\drivers\etc中的hosts文件,添加127.0.0.1 www.feiquan.com 2.修改D:\xampp\apac ...