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 先上效果图 ...
随机推荐
- 01TCP/IP基础
ISO/OSI参考模型: OSI(open system interconnection)开放系统互联模型是由ISO(International Organization for Standardiz ...
- jQuery实现登录提示
实现效果:将鼠标聚焦到邮箱地址文本框时,文本框 内的"请输入邮箱地址"文字将被清除: 若没有输入任何内容,鼠标移除后邮箱地址文本框被还原. <!DOCTYPE html& ...
- c++的历史-异常
1.异常出现的目的 在c++语言的设计和演化中,Bjarne Stroustrup说过异常的设计假定如下情况: 基本上是为了处理错误 与函数定义相比,异常处理是很少的 与函数调用相比,异常出现的频率较 ...
- 86. Partition List
Given a linked list and a value x, partition it such that all nodes less than x come before nodes gr ...
- yarn的调度策略
一. yarn的资源分配模型 无论先进先出调度器,容量调度器,还是公平调度器,他们的核心:资源分配模型是一样的. 调度器维护着多个队列的信息,用户可以向任意一个或多个队列提交job.每次NodeMan ...
- PLSQL_性能优化系列06_Oracle Soft Parse / Hard Parse软硬解析
2014-08-11 Createed By BaoXinjian
- PLSQL_性能优化系列05_Oracle Hint提示
2014-06-20 Created By BaoXinjian
- sublime代码片段功能
tools - > developer - > new snippet有了这个,你就可以通过iu这两个键,直接弄出自己的模板了,这就很方便了,不用在复制粘贴了.上是代码模板,下面是快捷键, ...
- centos6.5安装配置fastdfs+nginx实现分布式图片服务器
一.准备 yum groupinstall -y "Development Tools"yum install -y wget libevent-devel pcre-devel ...
- 防篡改php文件校验程序
<?php /** * 校验线上源文件是否和本地的一致 * User: Administrator * Date: 2015/11/26 * Time: 9:30 */ include_once ...