最近做项目中用selenium+requests开发自动化脚本,对于unittest框架做一些梳理。
unittest思路:首先是要写好TestCase,然后由TestLoader加载TestCase到TestSuite,然后由 TextTestRunner来运行TestSuite,运行的结果保存在TextTestResult中,整个过程集成在unittest.main模块中。
一、unittest库下的所有类:
__all__ = ['TestResult', 'TestCase', 'TestSuite',
'TextTestRunner', 'TestLoader', 'FunctionTestCase', 'main',
'defaultTestLoader', 'SkipTest', 'skip', 'skipIf', 'skipUnless',
'expectedFailure', 'TextTestResult', 'installHandler',
'registerResult', 'removeResult', 'removeHandler']
TestCase是所有测试类的父类,封装的测试类需要继承TestCase,其中提供了丰富的断言方法,setUp方法用于测试执行前的准备工作如连接数据库打开网页等,tearDown用于测试完之后的善后工作,
资源关闭等。测试方法必须以test_开头。
TestSuite用来生成测试套件,加载测试类中的方法。很多个TestCase集合起来就是一个TestSuite。可以一个一个方法逐步加载,也可以一次性加载类中的所有方法。
TestLoader().loadTestsFromTestCase(类名),一次性将类中的所有测试方法全部加载到suite中
TextTestRunner执行suite中加载进来的测试方法,并生成测试报告。我在项目中用的是HTMLTestRunner,类似于TextTestRunner的功能,生成HTML类型的测试报告。
二、框架结构
三、部分功能实现代码
- 读取Excel参数,转换成list类型
- 截图
- 打包
- 发送邮件
import os import smtplib from email.mime.text import MIMEText from email.header import Header from email.mime.multipart import MIMEMultipart from email.mime.application import MIMEApplication class email(): def send_email(self,attach_file): sender = "***@qq.com" recv = "544****[email protected]" msg = MIMEMultipart() msg['Subject'] = 'Python自动发送的测试邮件' msg['From'] = sender msg['To'] = recv #三个参数,内容、格式、编码格式 content = MIMEText('<p style="color:red;font-size:30px">Python自动发送的测试邮件</p>','html','utf-8') msg.attach(content) #添加附件 attachment = MIMEApplication(open(attach_file,'rb').read()) attachment.add_header('Content-Disposition','attachment',filename='Test_result.rar') msg.attach(attachment) #发送 try: s_obj = smtplib.SMTP() s_obj.connect(host='smtp.qq.com',port=25) s_obj.login(user='[email protected]',password='kitzwpgauumabbha') s_obj.sendmail(sender,recv,str(msg)) s_obj.quit() print('已发送') except Exception as e: print(e) print('未成功发送') if __name__ == '__main__': rar_data = os.path.abspath('.') + "\\report\\2018-08-09.rar" email().send_email(rar_data)