码迷,mamicode.com
首页 > 其他好文 > 详细

run_all_case

时间:2018-06-06 23:54:16      阅读:397      评论:0      收藏:0      [点我收藏+]

标签:并发   out   attach   multipart   receiver   smtplib   发送post请求   mon   ssl   

 

 

 技术分享图片

 

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最后一步发送报告

 

run_all_case

标签:并发   out   attach   multipart   receiver   smtplib   发送post请求   mon   ssl   

原文地址:https://www.cnblogs.com/zhongyehai/p/9147700.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!