python自动化--批量执行测试之生成报告
一、生成报告
1.先执行一个用例,并生成该用例的报告
# -*- coding: utf-8 -*-
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import Select
from selenium.common.exceptions import NoSuchElementException
from selenium.common.exceptions import NoAlertPresentException
import unittest, time, re,HTMLTestRunner class Baidy(unittest.TestCase):
def setUp(self):
self.driver = webdriver.Firefox()
self.driver.implicitly_wait(30)
self.base_url = "https://www.baidu.com"
self.verificationErrors = []
self.accept_next_alert = True def test_baidy(self):
u"""百度搜索"""
driver = self.driver
driver.get(self.base_url + "/")
driver.find_element_by_id("kw").clear()
driver.find_element_by_id("kw").send_keys("selenium webdriver")
driver.find_element_by_id("su").click()
time.sleep(2)
driver.close() def test_baidu_set(self):
u"""百度设置"""
driver = self.driver
# 进入搜索设置页面
driver.get(self.base_url+'/gaoji/preferences.html') menu = driver.find_element_by_id("nr")
menu.find_element_by_xpath(".//option[@value='20']").click()
driver.find_element_by_id("save").click()
driver.switch_to_alert().accept()
time.sleep(2)
driver.close() def tearDown(self):
self.driver.quit()
self.assertEqual([], self.verificationErrors) if __name__ == "__main__":
# 定义一个单元测试容器
testunit = unittest.TestSuite()
testunit.addTest(Baidy.test_baidy)
testunit.addTest(Baidy.test_baidu_set) # 定义报告存放路径
filename = r'E:\abc\web_testing\result.html'
fp = file(filename, 'wb') # 定义测试报告
runner = HTMLTestRunner.HTMLTestRunner(
stream=fp,
title=u'百度搜索测试报告',
description=u'用例执行情况:') # 运行测试用例
runner.run(testunit)
fp.close()
2.批量执行测试用例,先构造两个用例

# -*- coding: utf-8 -*-
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import Select
from selenium.common.exceptions import NoSuchElementException
from selenium.common.exceptions import NoAlertPresentException
import unittest, time, re,HTMLTestRunner class Baidy(unittest.TestCase):
def setUp(self):
self.driver = webdriver.Firefox()
self.driver.implicitly_wait(30)
self.base_url = "https://www.baidu.com"
self.verificationErrors = []
self.accept_next_alert = True def test_baidy(self):
u"""百度搜索"""
driver = self.driver
driver.get(self.base_url + "/")
driver.find_element_by_id("kw").clear()
driver.find_element_by_id("kw").send_keys("selenium webdriver")
driver.find_element_by_id("su").click()
time.sleep(2)
driver.close() def test_baidu_set(self):
u"""百度设置"""
driver = self.driver
# 进入搜索设置页面
driver.get(self.base_url+'/gaoji/preferences.html') menu = driver.find_element_by_id("nr")
menu.find_element_by_xpath(".//option[@value='20']").click()
driver.find_element_by_id("save").click()
driver.switch_to_alert().accept()
time.sleep(2)
driver.close() def tearDown(self):
self.driver.quit()
self.assertEqual([], self.verificationErrors) if __name__ == "__main__":
unittest.main()
baidy.py
# -*- coding: utf-8 -*-
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import Select
from selenium.common.exceptions import NoSuchElementException
from selenium.common.exceptions import NoAlertPresentException
import unittest, time, re class Youdao(unittest.TestCase): def setUp(self):
self.driver = webdriver.Firefox()
self.driver.implicitly_wait(30)
self.base_url = "http://www.youdao.com"
self.verificationErrors = []
self.accept_next_alert = True def test_youdao_search(self):
u"""有道搜索"""
driver = self.driver
driver.get(self.base_url + "/")
# driver.find_element_by_id("query").clear()
# driver.find_element_by_id("query").send_keys(u"你好")
# driver.find_element_by_id("qb").click()
driver.find_element_by_id("translateContent").clear()
driver.find_element_by_id("translateContent").send_keys(u"你好")
driver.find_element_by_xpath(".//*[@id='form']/button").click()
time.sleep(2)
driver.close() def tearDown(self):
self.driver.quit()
self.assertEqual([], self.verificationErrors) if __name__ == "__main__":
unittest.main()
youdao.py
并构造测试套件:根据套件来执行这两个文件的几条用例(baidu.py两条用例,youdao.py三条用例)
代码:
# -*- coding:utf-8 -*-
import unittest
import baidy,youdao
import HTMLTestRunner
import time testunit = unittest.TestSuite() # 将测试用例加入到测试容器(套件)中
testunit.addTest(unittest.makeSuite(baidy.Baidy))
testunit.addTest(unittest.makeSuite(youdao.Youdao)) # 执行测试套件
# runner = unittest.TextTestRunner()
# runner.run(testunit) # 定义报告存放路径,支持相对路径
filename = r"E:\abc\web_testing\test_case\all_test.html"
fp = file(filename, 'wb') runner = HTMLTestRunner.HTMLTestRunner(
stream=fp,
title=u'百度搜索测试报告',
description=u'用例执行情况') # 执行测试用例
runner.run(testunit)
fp.close()
all_test.py
注意,报告的基本格式如下:
# 定义报告存放路径,支持相对路径
filename = r"E:\abc\web_testing\test_case\all_test.html"
fp = file(filename, 'wb') runner = HTMLTestRunner.HTMLTestRunner(
stream=fp,
title=u'百度搜索测试报告',
description=u'用例执行情况') # 执行测试用例
runner.run(testunit)
fp.close()
生成的报告如下:

二、报告文件取当前的时间
在all_test.py中引入time,即import time,几个time的常用函数:
time.time() 获取当前时间戳
time.localtime() 当前时间的 struct_time 形式
time.ctime() 当前时间的字符串形式
time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
将all_test.py文件改为:
...
# 取前面时间
now = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(time.time())) # 定义报告存放路径,支持相对路径
filename = r"E:\abc\web_testing\test_case"+ now +'all_test.html'
fp = file(filename, 'wb') runner = HTMLTestRunner.HTMLTestRunner(
stream=fp,
title=u'百度搜索测试报告',
description=u'用例执行情况')
...
执行用例,即报错:
IOError: [Errno 22] invalid mode ('wb') or filename: 'E:\\abc\\web_testing\\test_case2016-12-21 19:43:20all_test.html'

这是因为时间不能用“:”冒号
now = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(time.time()))
将它改成:
now = time.strftime("%Y-%m-%d-%H_%M_%S", time.localtime(time.time()))
即可
以上内容感谢虫师的相关博客和书籍
python自动化--批量执行测试之生成报告的更多相关文章
- 通过SqlClr制作Sql自动化批量执行脚本
原文:通过SqlClr制作Sql自动化批量执行脚本 通过SqlClr制作Sql自动化批量执行脚本 在与同事一起做项目时,看到同事用sqlclr做批量执行脚本,感觉挺新奇的就上网搜集资料自己模仿跟做了个 ...
- python 分析慢查询日志生成报告
python分析Mysql慢查询.通过Python调用开源分析工具pt-query-digest生成json结果,Python脚本解析json生成html报告. #!/usr/bin/env pyth ...
- python自动化之使用allure生成测试报告
Allure测试报告框架帮助你轻松实现"高大上"报告展示.本文通过示例演示如何从0到1集成Allure测试框架.重点展示了如何将Allure集成到已有的自动化测试工程中.以及如何实 ...
- Selenium2+python自动化52-unittest执行顺序
前言 很多初学者在使用unittest框架时候,不清楚用例的执行顺序到底是怎样的.对测试类里面的类和方法分不清楚,不知道什么时候执行,什么时候不执行. 本篇通过最简单案例详细讲解unittest执行顺 ...
- Selenium2+python自动化52-unittest执行顺序【转载】
前言 很多初学者在使用unittest框架时候,不清楚用例的执行顺序到底是怎样的.对测试类里面的类和方法分不清楚,不知道什么时候执行,什么时候不执行. 本篇通过最简单案例详细讲解unittest执行顺 ...
- python +selenium 自带case +生成报告的模板
https://github.com/huahuijay/python-selenium2这个就是 python +selenium的 里面还自带case 然后也有生成报告的模板 我的: https: ...
- python+selenium 批量执行时出现随机报错问题【已解决】
出现场景:用discover方法批量执行py文件,出现随机性的报错(有时a.py报错,有时b.py报错...),共同特点:均是打开新窗口后,切换最新窗口,但定位不到新窗口的元素,超时报错.由于个人项目 ...
- Python实现批量执行华为交换机脚本
#!/usr/bin/python3 # -*- coding:utf-8 -*- import paramiko import time ssh = paramiko.SSHClient() key ...
- Appium+Python之批量执行测试用例
思考:当存在多个脚本,每个脚本中有多条测试用例时,我们该如何批量执行呢?分析:首先创建2个测试用例脚本(.py文件),每个脚本有2条测试用例,然后批量执行全部测试用例 #Test_01.py # co ...
随机推荐
- 连通图,set——cf1037E
看了题解又调了很久,用set来维护当前满足条件的pair<degree[v],v> 离线操作,先建好一张图,然后建立好集合,每次删边后都把集合里不满足条件的点删去,同时更新集合 /* 离线 ...
- LUOGU P1514 引水入城 (bfs)
传送门 解题思路 拉了很长的战线,换了好几种写法终于过了..首先每个蓄水场一定是对沙漠造成连续一段的贡献,所以可以$bfs$出每种状态,然后做一次最小区间覆盖,但这样的复杂度有点高.就每次只搜那些比左 ...
- 修改cmd命令默认路径
未修改之前: 修改方法: 1.win+r打开运行对话框,输入 regedit 打开注册表编辑器 2.在注册表中找到:HKEY_CURRENT_USER\Software\Microsoft\Comma ...
- VS2010-如何建立并运行多个含有main函数的文件
一.先说两个概念,解决方案与工程 在VS2010中,工程都是在解决方案管理之下的.一个解决方案可以管理多个工程,可以把解决方案理解为多个有关系或者没有关系的工程的集合. 每个应用程序都作为一个工程来处 ...
- SPSS科普 | 统计描述
SPSS科普 | 统计描述 统计描述的目的就是了解数据的基本特征和分布规律,为进一步合理地选择统计方法提供依据.常用的有Frequencies.Descriptives 和Explore过程. 一.F ...
- 使用Ajax在HTML页面中局部刷新页面(左边菜单右边页面)
转载自:https://blog.csdn.net/Cenmen_17714/article/details/80969008 index.html <a href="javascri ...
- Netty 框架基本流程
服务端 package com.mypractice.netty.server; import java.net.InetSocketAddress; import io.netty.bootstra ...
- quatz调度-手动终止线程(1) 创建触发器,线程执行完毕后添加到cleaner list
import org.quartz.JobDetail; import org.quartz.Scheduler; import org.quartz.SchedulerException;impor ...
- Django之框架简介
了解即可: 1.MVC,全名是Model View Controller,是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model).视图(View)和控制器(Controller ...
- sqlmap:wins系统+python3上安装
python2和python3互不兼容,SqlMap是基于python2的,所以SqlMap不支持python3,这里使用virtualenvwrapper切换python版本: 一.sqlmap的安 ...