import requests
import unittestclass 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_emailimport unittestimport timefrom common.HtmlTestRunner import HTMLTestRunnerfrom email.mime.text import MIMETextfrom email.mime.multipart import MIMEMultipartimport smtplibimport 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 discoverdef 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_filedef 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最后一步发送报告