python接口自动化测试二十五:执行所有用例,并生成HTML测试报告
import requests
import unittest
class TestQQ(unittest.TestCase):
'''测试QQ号接口''' # 此注释将展示到测试报告的测试组类
def test_qq(self):
'''测试QQ号码,正确的appkey''' # 此注释将展示到测试报告的用例标题
url = 'http://japi.juhe.cn/qqevaluate/qq'
par = {
'key': '8dbee1fcd8627fb6699bce7b986adc45',
'qq': '907728701'
}
# 发送post请求
r = requests.post(url, params=par)
print(r.text) # 获取返回的结果
result = r.json()['reason']
print(result)
# 断言
self.assertTrue('success' == result) # 断言:'success' == result
self.assertTrue('success' in r.text) # 断言:'success' 在 r.text的返回内容里面
self.assertIn('success', r.text) # 断言:'success' 在 r.text的返回内容里面
# 断言:'success' == result
self.assertEqual('success', result, msg='失败的时候,打印这里')
def test_qq_appker_error(self):
'''测试QQ号码,错误的appkey''' # 此注释将展示到测试报告的用例标题
url = 'http://japi.juhe.cn/qqevaluate/qq'
par = {
'key': '8dbee1fcd8627fb6699bce7b986adc45',
'qq': '907728701'
}
# 发送post请求
r = requests.post(url, params=par)
print(r.text) # 获取返回的结果
result = r.json()['reason']
print(result)
# 断言
self.assertTrue('success' == result) # 断言:'success' == result
self.assertTrue('success' in r.text) # 断言:'success' 在 r.text的返回内容里面
self.assertIn('success', r.text) # 断言:'success' 在 r.text的返回内容里面
# 断言:'success' == result
self.assertEqual('success', result, msg='失败的时候,打印这里')
if __name__ == '__main__':
unittest.main
import requests
import unittest class TestWeather(unittest.TestCase):
'''测试天气预报接口''' # 此注释将展示到测试报告的测试组类
def test_Weather(self):
'''可用次数超限''' # 此注释将展示到测试报告的用例标题
url = "http://v.juhe.cn/weather/index"
par = {
"cityname": "深圳", # 城市名或城市ID,如:"苏州",需要utf8 urlencode
"dtype": "json", # 返回数据格式:json或xml,默认json
"format": "1", # 未来7天预报(future)两种返回格式,1或2,默认1
"key": "80b4d4e1d870d257d3344fcf2d08f64a" # key须申请
}
r = requests.get(url, params=par)
print(r.text) # 获取返回的结果
result = r.json()['reason']
print(result)
# 断言
self.assertEqual('reason', result)
self.assertIn('reason', r.text)
self.assertTrue('reason'in r.text) def test_Weather_appkey_error(self):
'''错误的key''' # 此注释将展示到测试报告的用例标题
url = "http://v.juhe.cn/weather/index"
par = {
"cityname": "深圳", # 城市名或城市ID,如:"苏州",需要utf8 urlencode
"dtype": "json", # 返回数据格式:json或xml,默认json
"format": "1", # 未来7天预报(future)两种返回格式,1或2,默认1
"key": "8dfghfhgfhgfh" # key须申请
}
r = requests.get(url, params=par)
print(r.text) # 获取返回的结果
result = r.json()['reason']
print(result)
# 断言
self.assertEqual('reason', result)
self.assertIn('reason', r.text)
self.assertTrue('reason'in r.text)
# run_all_case
import unittest
import os
# 从工程下面的第一层开始导入
from common.HtmlTestRunner import HTMLTestRunner
# 用例存放的路径
# startdir = 'D:\PycharmProjects\interface\case' # 绝对路径,容易出错 # 获取当前脚本的路径
curPath = os.path.dirname(os.path.realpath(__file__)) # 获取文件路径
startdir = os.path.join(curPath, 'case') # 测试用例路径
# 获取测试报告:'report.html'路径
reportPath = os.path.join(curPath, 'report', 'report.html') # 匹配规则
rule = 'test*.py'
discover = unittest.defaultTestLoader.discover(startdir, rule)
print(discover) # 生成HTML格式的报告
fp = open(reportPath, 'wb') # 把测试报告以二进制的规则写进“report_report.html”文件中
runner = HTMLTestRunner(fp,
title='钟叶海的接口测试报告', # 报告标题
description='报告如下:', # 报告的描述
verbosity=2, # 将注释在测试用例中展示
retry=1 # 失败后,重跑1次(次数可随意更改)
)
runner.run(discover)
fp.close() # 写完后关闭HTML报告 # 生成TXT格式的报告
# runner = unittest.TextTestRunner()
# runner .run(discover)
# 运行所有用例,以邮件发送结果
# coding=utf-8
# run_and_send_email
import unittest
import time
from common.HtmlTestRunner import HTMLTestRunner
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
import smtplib
import os
# ####下面三行代码python2报告出现乱码时候可以加上####
# python2须加此三条
# import sys
# reload(sys)
# sys.setdefaultencoding('utf8')
# 这个是优化版执行所有用例并发送报告,分四个步骤
# 第一步加载用例
# 第二步执行用例
# 第三步获取最新测试报告
# 第四步发送邮箱 (这一步不想执行的话,可以注释掉最后面那个函数就行)
# 当前脚本所在文件真实路径
cur_path = os.path.dirname(os.path.realpath(__file__))
def add_case(caseName="case", rule="test*.py"):
'''第一步:加载所有的测试用例'''
case_path = os.path.join(cur_path, caseName) # 用例文件夹
# 如果不存在这个case文件夹,就自动创建一个
if not os.path.exists(case_path): os.mkdir(case_path)
print("test case path:%s" % case_path)
# 定义discover方法的参数
discover = unittest.defaultTestLoader.discover(case_path,
pattern=rule,
top_level_dir=None)
print(discover)
return discover
def run_case(all_case, reportName="report"):
'''第二步:执行所有的用例, 并把结果写入HTML测试报告'''
now = time.strftime("%Y_%m_%d_%H_%M_%S")
report_path = os.path.join(cur_path, reportName) # 用例文件夹
# 如果不存在这个report文件夹,就自动创建一个
if not os.path.exists(report_path): os.mkdir(report_path)
report_abspath = os.path.join(report_path, "result.html")
print("report path:%s" % report_abspath)
fp = open(report_abspath, "wb")
runner = HTMLTestRunner(fp,
title='报告的标题:这个是我的接口项目', # 报告标题
description='报告如下:', # 报告的描述
verbosity=2, # 将注释在测试用例中展示
retry=1 # 失败后,重跑1次(次数可随意更改)
)
# 调用add_case函数返回值
runner.run(all_case)
fp.close()
def get_report_file(report_path):
'''第三步:获取最新的测试报告'''
lists = os.listdir(report_path)
lists.sort(key=lambda fn: os.path.getmtime(os.path.join(report_path, fn)))
print(u'最新测试生成的报告: ' + lists[-1])
# 找到最新生成的报告文件
report_file = os.path.join(report_path, lists[-1])
return report_file
def send_mail(sender, psw, receiver, smtpserver, report_file, port):
'''第四步:发送最新的测试报告内容'''
with open(report_file, "rb") as f:
mail_body = f.read()
# 定义邮件内容
msg = MIMEMultipart()
body = MIMEText(mail_body, _subtype='html', _charset='utf-8')
msg['Subject'] = u"自动化测试报告"
msg["from"] = sender
msg["to"] = str(receiver) # 只能字符串
msg.attach(body)
# 添加附件
att = MIMEText(open(report_file, "rb").read(), "base64", "utf-8")
att["Content-Type"] = "application/octet-stream"
att["Content-Disposition"] = 'attachment; filename= "report.html"'
msg.attach(att)
try:
smtp = smtplib.SMTP()
smtp.connect(smtpserver) # 连服务器
smtp.login(sender, psw)
except:
smtp = smtplib.SMTP_SSL(smtpserver, port)
smtp.login(sender, psw) # 登录
smtp.sendmail(sender, receiver, msg.as_string())
smtp.quit()
print('test report email has send out !')
if __name__ == "__main__":
all_case = add_case() # 1加载用例
# # 生成测试报告的路径
run_case(all_case) # 2执行用例
# # 获取最新的测试报告文件
report_path = os.path.join(cur_path, "report") # 用例文件夹
report_file = get_report_file(report_path) # 3获取最新的测试报告
# #邮箱配置
# sender = "yoyo@qq.com"
# psw = "xxx"
# smtp_server = "smtp.qq.com"
# port = 465
# receiver = "yoyo@qq.com"
# send_mail(sender, psw, receiver, smtp_server, report_file, port) # 4最后一步发送报告
python接口自动化测试二十五:执行所有用例,并生成HTML测试报告的更多相关文章
- python接口自动化测试二十六:使用pymysql模块链接数据库
#!/usr/bin/env python# -*- coding: utf-8 -*-# @Time : 2018/5/28 18:51# @Author : StalloneYang# ...
- python接口自动化测试二十九:yaml配置文件的写和读
# 先安装ruamel.yaml模块 写入配置文件: import os# 先安装ruamel.yaml模块from ruamel import yaml # 将字典写入到yamldict = { ' ...
- python接口自动化测试二十八:连接SQL sever操作
1.中文乱码问题: (1).文件头加上# -*- coding:utf-8 -*- 或者 #coding=utf8 (2).pymssql.connect连接串中charset是要跟你数据库的编码一样 ...
- python接口自动化测试三十五:用BeautifulReport生成报告
GitHub传送门:https://github.com/TesterlifeRaymond/BeautifulReport 配置BeautifulReport 下载.解压并修改名字为Beautifu ...
- python接口自动化测试二十四:上传多个附件,参数化
# 添加多个附件参数化files = [("1.png", "1.png") ("2.png", "2.png") ]d ...
- python接口自动化测试二十二:文件下载
文件下载类型: Content-Type: octets/stream 一般为文件类型:
- python接口自动化测试二十:函数写接口测试
# coding:utf-8import requestsimport refrom bs4 import BeautifulSoup # s = requests.session() # 全局的s ...
- python接口自动化测试二十七:密码MD5加密 ''' MD5加密 ''' # 由于MD5模块在python3中被移除 # 在python3中使用hashlib模块进行md5操作 import hashlib # 待加密信息 str = 'asdas89799,.//plrmf' # 创建md5对象 hl = hashlib.md5() # Tips # 此处必须声明encode # 若写法为
python接口自动化测试二十七:密码MD5加密 ''' MD5加密 '''# 由于MD5模块在python3中被移除# 在python3中使用hashlib模块进行md5操作import has ...
- Python学习日记(二十五) 接口类、抽象类、多态
接口类 继承有两种用途:继承基类的方法,并且做出自己的改变或扩展(代码重用)和声明某个子类兼容于某基类,定义一个接口类interface,接口类中定义了一些接口名(就是函数名)且并未实现接口的功能,子 ...
随机推荐
- saltstack安装与配置
Saltstack是基于Python开发的一套C/S架构,具备Puppet.Ansible功能于一身的配置管理工具,功能十分强大,各模块融合度及复用性极高:使用号称世界上最快的消息队列ZeroMQ使得 ...
- 即将上线的Kafka服务器面临的一系列填坑笔记
即将上线的Kafka服务器面临的一系列填坑笔记 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Kafka日志报错:[error] k.m.j.KafkaJMX$ - Fai ...
- FastDFS整合nginx后,nginx一直报错
FastDFS整合nginx后,nginx一直报错: 报错内容: [2018-06-11 09:41:21] ERROR - file: ../common/fdfs_http_shared.c, l ...
- JavaSE考试前练习
汽车租赁管理系统(CarRents) 120分钟 要求:请使用JavaEE实现一个汽车租赁管理系统,汽车租赁的属性主要包含:车牌(License).公里数(kilo).品牌(brand),租金(mo ...
- 转--python 编码规范
编程规范 1.1. 命名规范 1.1.1. [强制] 命名不能以下划线或美元符号开始和结尾 反例: name / __name / $Object / name / name$ / Object$ 1 ...
- web中的乱码处理
1 .web中的中文乱码处理 1.页面设置pageEncoding="UTF-8" <%@ page contentType="text/html;charset= ...
- Java EE之Struts2路径访问小结
一.项目WEB视图结构 注释:struts.xml:最普通配置,任何无特殊配置 二.访问页面 1.访问root.jsp //方式1: http://localhost/demo/root.jsp // ...
- python时间序列画图plot总结
画图从直觉上来讲就是为了更加清晰的展示时序数据所呈现的规律(包括趋势,随时间变化的规律(一周.一个月.一年等等)和周期性规律),对于进一步选择时序分析模型至关重要.下面主要是基于pandas库总结一下 ...
- Java HotSpot(TM) 64-Bit Server VM warning: ignoring option MaxPermSize=128m; support was removed in 8.0
1 启动hbase的时候爆出警告 Java HotSpot(TM) 64-Bit Server VM warning: ignoring option MaxPermSize=128m; suppor ...
- mysql原理~undo管理
一 简介:undo管理 二 各版本说明 1 5.5 undo位置:默认ibdata1中,不支持独立表空间 缺点:大事务可能造成ibdata1暴涨,只能dump导出导入或者从新搭建 参数: ...