最近博主完成了一个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. 01TCP/IP基础

    ISO/OSI参考模型: OSI(open system interconnection)开放系统互联模型是由ISO(International Organization for Standardiz ...

  2. UIDatePicker自定义背景

    selectDatePicker = [[UIDatePicker alloc]init];    selectDatePicker.frame = CGRectMake(0, 10, 280, 21 ...

  3. javascript url 相关函数(escape/encodeURL/encodeURIComponent区别)

    JS获取url参数及url编码.解码 完整的URL由这几个部分构成:scheme://host:port/path?query#fragment ,各部分的取法如下: window.location. ...

  4. 剑指offer系列53---字符串转化成整数

    [题目]将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数 * []整数(32位)最大值:0X7fff ffff( 0111 1111 1111 1111 1111 1111 1111 1 ...

  5. CentOS下用pyenv 和 virtualenv 搭建单机多版本python 虚拟开发环境

    安装 系统环境:CentOS 6.5 安装依赖 yum -y install gcc gcc-c++ make git patch openssl-devel zlib-devel readline- ...

  6. liveusb-creator

    liveusb-creator The liveusb-creator is a cross-platform tool for easily installing live operating sy ...

  7. linux系统中实现mongodb3.0.5数据库自动备份

    最近两天,因公司业务需要,要定期备份mongodb数据库中的数据. 查了很多资料后,发现mongodb似乎并没有自带的定时备份功能,于是只好转移目标到linux系统的定时任务上,于是学习并使用了cro ...

  8. 黄聪:wordpress源码解析-数据库表结构(转)

    如果是一个普通的用户,不需要了解wordpress数据库的结构.但是,如果你正在写一个插件,你应该会对wordpress如何处理它的数据和关系感兴趣.如果你已经尝试使用已经存在的wordpress a ...

  9. ERP_Oracle Erp发展趋势基于SOA电子商务方案

    2014-01-12 Created By BaoXinjian

  10. CE_现金账户转账汇入汇出交易(案例)(未完成)

    2014-07-15 BaoXinjian 一.摘要 二.案例   通过 Oracle Payments 结算事务处理 通过付款模板 事物处理子类型 已验证 -> 正在结算中 ->