最近博主完成了一个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自动化测试平台搭建、测试报告生成、邮件转发)的更多相关文章

  1. 自动化测试 接口自动化及UI自动化测试平台设计演示

    接口自动化及UI自动化测试平台设计演示   by:授客  QQ:1033553122 欢迎加入全国软件测试交流qq群:7156436 大家好,我是授客. 本视频意在分享个人,基于Python,Djan ...

  2. Python+Selenium UI自动化测试环境搭建及使用

    一什么是Selenium ? Selenium 是一个浏览器自动化测试框架,它主要用于web应用程序的自动化测试,其主要特点如下:开源.免费:多平台.浏览器.多语言支持:对web页面有良好的支持:AP ...

  3. django+appium实现UI自动化测试平台---构思版

             背景 UI自动化,在进行的过程中,难免会遇到平台化, 在实际的工作中,有的领导也会想要实现自动化测试的平台化.自动化平台化后,有了更为实际的成果, 在做UI自动化,很想吧现在的自动化 ...

  4. Python Selenium unittest+HTMLTestRunner实现 自动化测试及发送测试报告邮件

    1.UI测试框架搭建-目录结构 2. 文件介绍 2.1.baseinfo->__init__.py 配置文件定义基础参数 #-*-coding:utf-8-*- #测试用例配置参数 base_u ...

  5. Jmeter+ant+jenkins接口自动化测试 平台搭建(一)

    平台简介 一个完整的接口自动化测试平台需要支持接口的自动执行,自动生成测试报告,以及持续集成.Jmeter 支持接口的测试,Ant 支持自动构建,而 Jenkins 支持持续集成,所以三者组合在一起可 ...

  6. Android Espresso(UI自动化测试)的搭建

    Espresso是Google官方提供的Android UI自动化测试的框架. 为什么叫Espresso(浓咖啡),好像是想让Android码农们轻松的写完自动化用例后能享受着咖啡,看着自动化测试&q ...

  7. 三、自动化测试平台搭建-django-如何用mysql数据库做web项目

    从这节开始到后面说的大概内容如下: 这里说的是Django做一个web项目的大概框架,从下篇具体说Django中的模型(查询..),视图(请求,响应,cookie,session..),模板(验证码, ...

  8. HttpRunnerManager 接口自动化测试平台 搭建实践

    一.需要准备的知识点 1. linux: 安装 python3.nginx 安装和配置.mysql 安装和配置 2. python: django 配置.uwsgi 配置 二.我搭建的环境 1. Ce ...

  9. Jmeter+ant+jenkins接口自动化测试 平台搭建(三)

    四.报告优化 Jmeter 默认生成报告不是很详细,因此我们需要进行优化.这里我们使用新的报告模板:默认的报告模板是 jmeter-results-detail-report_21.xsl 先上效果图 ...

随机推荐

  1. ASIHttpRequest addRequestHeader的处理

    我现在用到了ASIHttpRequest来读取数据,这时候我发现里面的头在很多时候都是一样的.如用户的令牌,设备类型,ios版本,软件版本等 [self.request addRequestHeade ...

  2. css3之transform的应用

    一.利用transform实现图片额外显示 效果图如下 初始状态:

  3. vue通过判断写样式(v-bind)

    v-bind:style="$index % 2 > 0?'background-color:#FFF;':'background-color:#D4EAFA;'"

  4. sublime安装DocBlockr注释插件

    点击sublime的菜单栏 view->show console :现在打开了控制台, 这个控制台有上下两栏, 上面一栏会实时显示sublime执行了什么插件,输出执行结果, 如果你安装的某个插 ...

  5. 在Linux中使用VS Code编译调试C++项目

    最近项目需求,需要在Linux下开发C++相关项目,经过一番摸索,简单总结了一下如何通过VS Code进行编译调试的一些注意事项. 关于VS Code在Linux下的安装这里就不提了,不管是CentO ...

  6. 使用eclipse和maven生成java web程序war包

    一.eclipse中,在需要打包的项目名上右击,然后把鼠标光标指向弹出框中的“run as”: 二.之后会看到在这个弹出框的右侧会出现一个悬浮窗,如下: 三.在上边的第二个悬浮窗鼠标点击“maven  ...

  7. Hadoop学习3--安装ssh服务

    题前语:为什么要安装这个东西呢? 是因为我们要在多台机器之间通信,这个服务就相当于支持这种通信的一个桥梁,打个比喻,相当于windows里,通过远程桌面连接到其他机器. 所以,安装这个服务,的目的是: ...

  8. Win8 安装驱动

    从微软的网站上面下载了一些驱动,发现竟然没有Setup或者Install安装程序,囧. 快速查了一下,直接在inf文件右击的菜单里面选择“安装”即可.突然有点out的感觉. 参考:http://dig ...

  9. HTML5列表、块、布局

    一.列表 <ol>  无序列表  (每项前有.) <ul>  有序列表   (每项前有编号1,,2,3) <li>   列表项 <ul type=" ...

  10. Android学习笔记02

    1.线性布局LinearLayout <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android&q ...