selenium项目总结(UI自动化测试平台搭建、测试报告生成、邮件转发)
最近博主完成了一个web端UI自动化平台测试环境搭建,包括常用的操作流程组合成方法,组织测试用例,利用框架及报告文件生成,最后通过邮件添加附件的格式发送。
首先UI自动化平台的核心是selenium+python、里面一些元素定位的操作博主也就不做介绍了,有很多大神都有详细的文档来辅助、博主这里想总结的是如何通过模块的方式来写通用的方法来简化测试工作。
就拿最简单的登录注册页面来举例,可能需要设计的用例:不存在的用户名、正确的用户名加错误的密码、正确的用户名加空密码、正确的用户名加正确的密码。 博主这里就简单的列一些常用的用例(别吐槽用例覆盖不全),
然后来通过 selenium的 定位API来写用例代码,每一个用例都包括:进入登录页、用户名的操作、密码的操作、确认登录,博主想说的就是类似这样同一个页面、不同的操作可以通过定义方法的形式来整合代码,
把相应元素但不同操作用定义的变量来区别。
下面是一个类似的例子:
# ERP自动化登录接口
@classmethod
def erp_login(cls, username, password):
driver = cls.driver
driver.find_element_by_id("btn-front").click() # 登录名称
driver.find_element_by_id("DloginName").send_keys(username)
# 登录密码
driver.find_element_by_id("Dpassword").send_keys(password) driver.find_element_by_id("Flogin").click()
同样比如一个表单新增功能,涉及的字段多了,同样可以通过定义方法来整合,如此可以大大优化代码,否则相似的用例会出现大量重复的操作步骤代码,而且随着方法的不断增加,测试用例也变成不同方法的组合
例如:
# ERP自动化前台测试用例
def test_case_1(self):
u"""菜肴条件:时价主菜称重备注(535465);单独下单"""
TestErp.erp_login(self, "237nj03", "")
TestErp.erp_front(self)
TestErp.erp_front_open_dish_Desk(self, "")
TestErp.erp_front_dish_pwfb(self, "", "1.5", "", "")
TestErp.erp_front_dish_order(self)
TestErp.erp_front_account_clearDesk(self, "")
这是一个用例集,是在单元测试框架unittest里的,之前博主也介绍过,博主负责的项目是一个智能餐饮系统
TestErp.erp_login 这个是登录的方法
TestErp.erp_front 这个是进入前台的方法
TestErp.erp_front_open_dish_Desk 这个是餐饮系统中选择变量(desk_id)来开台
TestErp.erp_front_dish_pwfb 这个是选择其中一种菜肴信息,输入 price 价格、weight 称重、 配菜信息
TestErp.erp_front_dish_order 这个是下单操作
TestErp.erp_front_account_clearDesk 这个是进入结账页、选择现金结账打印并清台
之后就是通过构建用例集来执行用例,并发送邮件
#!/usr/bin/env python
# -*- coding: utf-8 -*- from unittest_erp import TestErp
import HTMLTestRunner
import unittest
from datetime import datetime
from time import sleep
from unittest_smtp import unittest_smtp # 定义测试报告的文件名称
reportname = datetime.today().strftime("%Y%m%d%H%M%S") + ".html"
# 定义测试任务集
testreport = unittest.TestSuite() # 给测试任务集添加测试用例任务的名称
testreport.addTest(TestErp("test_case_1"))
testreport.addTest(TestErp("test_case_2"))
testreport.addTest(TestErp("test_case_3"))
testreport.addTest(TestErp("test_case_4"))
testreport.addTest(TestErp("test_case_5"))
testreport.addTest(TestErp("test_case_6"))
testreport.addTest(TestErp("test_case_7"))
testreport.addTest(TestErp("test_case_8"))
testreport.addTest(TestErp("test_case_9"))
testreport.addTest(TestErp("test_case_10"))
testreport.addTest(TestErp("test_case_11"))
testreport.addTest(TestErp("test_case_12"))
testreport.addTest(TestErp("test_case_13"))
testreport.addTest(TestErp("test_case_14"))
testreport.addTest(TestErp("test_case_15"))
testreport.addTest(TestErp("test_case_16")) # 定义测试报告的文件路径
file_path = "D:\\pythonproject\\Wito_erp\\wito_selenium\\" + reportname
fp = file(file_path, "wb")
runner = HTMLTestRunner.HTMLTestRunner(stream=fp,
title=u"测试报告",
description=u"用例执行情况:"
)
# 执行测试任务集
runner.run(testreport) fp.close() # 关闭文件 # 根据文件路径、定义附件名称发送邮件
unittest_smtp(file_path, reportname)
#!/usr/bin/env python
# -*- coding: utf_8 -*- from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.header import Header
from email.utils import parseaddr, formataddr
import smtplib def _format_address(text):
name, address = parseaddr(text)
return formataddr((Header(name, "utf-8").encode(), address)) def unittest_smtp(file, filename):
from_address = "xx@xx.com"
# 发件箱地址
password = "123456!a"
# 授权密码 不是邮箱登录密码
# to_address = "xx@xx.com"
to_address = "xx@xx.com"
# 收件箱地址
smtp_server = "smtp.ym.163.com"
# 发件箱服务器地址 # message = MIMEText(mail_msg, "html", "utf-8") message = MIMEMultipart()
# msg = MIMEText("测试smtp邮件发送功能", "plain", "utf-8")
# 第一个参数:邮件正文
# 第二个参数:邮件类型 纯文本
# 第三个参数:编码 message["From"] = _format_address("自动化测试报告 <%s>" % from_address)
# 发件人姓名与地址
message["To"] = _format_address("xx <%s>" % to_address)
# 收件人姓名与地址
message["Subject"] = Header("xx自动化测试平台邮箱服务", "utf-8").encode()
# 邮件标题
message.attach(MIMEText("xx自动化测试任务执行完毕,附测试报告文件", "plain", "utf-8"))
# 接收html格式文件 att1 = MIMEText(open(file, "rb").read(), "base64", "utf-8")
# 文件地址
att1["Content-Type"] = "application/octet-stream"
att1["Content-Disposition"] = "attachment; filename=%s" % filename
# 定义附件名称 message.attach(att1)
# 添加附件
try:
server = smtplib.SMTP(smtp_server, 25)
# 构造smtp服务器连接
server.set_debuglevel(1)
# 打开debug输出模式
server.login(from_address, password)
# 登录smtp服务器
server.sendmail(from_address, to_address, message.as_string())
# 发送邮件 print "邮件发送成功"
server.quit()
except smtplib.SMTPException:
print "Error: 无法发送邮件"
最后附上邮件图片
selenium项目总结(UI自动化测试平台搭建、测试报告生成、邮件转发)的更多相关文章
- 自动化测试 接口自动化及UI自动化测试平台设计演示
接口自动化及UI自动化测试平台设计演示 by:授客 QQ:1033553122 欢迎加入全国软件测试交流qq群:7156436 大家好,我是授客. 本视频意在分享个人,基于Python,Djan ...
- Python+Selenium UI自动化测试环境搭建及使用
一什么是Selenium ? Selenium 是一个浏览器自动化测试框架,它主要用于web应用程序的自动化测试,其主要特点如下:开源.免费:多平台.浏览器.多语言支持:对web页面有良好的支持:AP ...
- django+appium实现UI自动化测试平台---构思版
背景 UI自动化,在进行的过程中,难免会遇到平台化, 在实际的工作中,有的领导也会想要实现自动化测试的平台化.自动化平台化后,有了更为实际的成果, 在做UI自动化,很想吧现在的自动化 ...
- Python Selenium unittest+HTMLTestRunner实现 自动化测试及发送测试报告邮件
1.UI测试框架搭建-目录结构 2. 文件介绍 2.1.baseinfo->__init__.py 配置文件定义基础参数 #-*-coding:utf-8-*- #测试用例配置参数 base_u ...
- Jmeter+ant+jenkins接口自动化测试 平台搭建(一)
平台简介 一个完整的接口自动化测试平台需要支持接口的自动执行,自动生成测试报告,以及持续集成.Jmeter 支持接口的测试,Ant 支持自动构建,而 Jenkins 支持持续集成,所以三者组合在一起可 ...
- Android Espresso(UI自动化测试)的搭建
Espresso是Google官方提供的Android UI自动化测试的框架. 为什么叫Espresso(浓咖啡),好像是想让Android码农们轻松的写完自动化用例后能享受着咖啡,看着自动化测试&q ...
- 三、自动化测试平台搭建-django-如何用mysql数据库做web项目
从这节开始到后面说的大概内容如下: 这里说的是Django做一个web项目的大概框架,从下篇具体说Django中的模型(查询..),视图(请求,响应,cookie,session..),模板(验证码, ...
- HttpRunnerManager 接口自动化测试平台 搭建实践
一.需要准备的知识点 1. linux: 安装 python3.nginx 安装和配置.mysql 安装和配置 2. python: django 配置.uwsgi 配置 二.我搭建的环境 1. Ce ...
- Jmeter+ant+jenkins接口自动化测试 平台搭建(三)
四.报告优化 Jmeter 默认生成报告不是很详细,因此我们需要进行优化.这里我们使用新的报告模板:默认的报告模板是 jmeter-results-detail-report_21.xsl 先上效果图 ...
随机推荐
- 【linux】man和--help
man和--help都是获取命令帮助的指令. man 格式: man [命令] [root@andon tmp]# man pwd --help 命令 --help [root@andon tmp]# ...
- Java 提示 JRE unbound 或者 Tomcat unbound 解决方法
解决步骤 1.右键你的项目>>build path>>config build path 2. 选中显示 unbound的 Libraries >>Edit 如下图 ...
- 【并发编程】Executor类的继承结构
来自为知笔记(Wiz)
- Jedis编程设计:连接池
Jedis作为redis的最佳客户端,它提供了连接池的特性,"连接池"在通常情况下可以有效的提高应用的通信能力,并且这是一种良好的设计模式.Jedis的连接池设计基于apa ...
- SqlServer统计最近一周的数据
select * from 表名 where DATEDIFF( day, 日期字段列名,getdate())<7 and DATEPART(w, 日期字段列名) <DATEPART( ...
- 设置ulimit值(Linux文件句柄数量)永久生效
Linux 默认打开文件数linux 默认打开文件数为1024个,通过ulimit -a 可以查看open files修改这个限制可以使用ulimt -SHn 65536永久生效需要进行下面设置:1. ...
- (C#) 调用执行批处理文件
Task: 在Windows的Service里面定时的调用执行一个批处理文件. private ApplicationOutput RunCommandOnPC(string executableP ...
- C#学习笔记四: C#3.0自动属性&匿名属性及扩展方法
前言 这一章算是看这本书最大的收获了, Lambda表达式让人用着屡试不爽, C#3.0可谓颠覆了我们的代码编写风格. 因为Lambda所需篇幅挺大, 所以先总结C#3.0智能编译器给我们带来的诸多好 ...
- FB Flash Builder 安装错误 ERROR: DW050: - Microsoft Visual C++ 2010 Redistributable Package (x86): Install failed
这个问题很可能是你的 Microsoft Visual C++ 2010 Redistributable Package (x86) 太新的缘故,所以无法安装成功,导致最终的失败. 在控制面板-程序和 ...
- PLSQL_性能优化工具系列05_SQL Trace/Event 10046 Trace
2014-06-25 Created By BaoXinjian