一、生成报告

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自动化--批量执行测试之生成报告的更多相关文章

  1. 通过SqlClr制作Sql自动化批量执行脚本

    原文:通过SqlClr制作Sql自动化批量执行脚本 通过SqlClr制作Sql自动化批量执行脚本 在与同事一起做项目时,看到同事用sqlclr做批量执行脚本,感觉挺新奇的就上网搜集资料自己模仿跟做了个 ...

  2. python 分析慢查询日志生成报告

    python分析Mysql慢查询.通过Python调用开源分析工具pt-query-digest生成json结果,Python脚本解析json生成html报告. #!/usr/bin/env pyth ...

  3. python自动化之使用allure生成测试报告

    Allure测试报告框架帮助你轻松实现"高大上"报告展示.本文通过示例演示如何从0到1集成Allure测试框架.重点展示了如何将Allure集成到已有的自动化测试工程中.以及如何实 ...

  4. Selenium2+python自动化52-unittest执行顺序

    前言 很多初学者在使用unittest框架时候,不清楚用例的执行顺序到底是怎样的.对测试类里面的类和方法分不清楚,不知道什么时候执行,什么时候不执行. 本篇通过最简单案例详细讲解unittest执行顺 ...

  5. Selenium2+python自动化52-unittest执行顺序【转载】

    前言 很多初学者在使用unittest框架时候,不清楚用例的执行顺序到底是怎样的.对测试类里面的类和方法分不清楚,不知道什么时候执行,什么时候不执行. 本篇通过最简单案例详细讲解unittest执行顺 ...

  6. python +selenium 自带case +生成报告的模板

    https://github.com/huahuijay/python-selenium2这个就是 python +selenium的 里面还自带case 然后也有生成报告的模板 我的: https: ...

  7. python+selenium 批量执行时出现随机报错问题【已解决】

    出现场景:用discover方法批量执行py文件,出现随机性的报错(有时a.py报错,有时b.py报错...),共同特点:均是打开新窗口后,切换最新窗口,但定位不到新窗口的元素,超时报错.由于个人项目 ...

  8. Python实现批量执行华为交换机脚本

    #!/usr/bin/python3 # -*- coding:utf-8 -*- import paramiko import time ssh = paramiko.SSHClient() key ...

  9. Appium+Python之批量执行测试用例

    思考:当存在多个脚本,每个脚本中有多条测试用例时,我们该如何批量执行呢?分析:首先创建2个测试用例脚本(.py文件),每个脚本有2条测试用例,然后批量执行全部测试用例 #Test_01.py # co ...

随机推荐

  1. duilib教程之duilib入门简明教程1.前言

    关于duilib的介绍就不多讲了,一来不熟,二来小伙伴们想必已经对比了多个界面库,也无需赘述.下面进入正题:    不看广告看疗效! 已有众多知名公司采用duilib做为界面库,如华为网盘.PPS(P ...

  2. ssoj 2279 磁力阵

    说不想改最后还是向T1屈服了..然后就de了一下午Bug... 虽然昨天随口扯的有点道理,正解就是迭代加深A星搜索,但实际写起来就十分难受了. 说自己的做法,略鬼畜. 每个正方形的边界上的边.每条边在 ...

  3. C++ 连接上期所CTP交易行情接口

    CTP相关接口和文档下载: http://www.simnow.com.cn/static/softwareDownload.action 相关库文件以及头文件如下: 遇到的问题: 1.运行直接退出了 ...

  4. Python学习day02 - 编程分类和Pycharm和Jupyter的安装

    编程语言分类 编程语言是用来和计算机交互的,计算机只认识0和1 机器语言(低级语言) 直接和硬件交互 用0和1和计算机沟通 优点:执行效率最高 缺点:开发效率低 汇编语言直接和硬件交互 优点(相较于机 ...

  5. python学习笔记4.2_正则表达式

    常用正则表达式:http://tool.chinaz.com/regex/ 1.正则表达式:提供了一种在文本中灵活查找或匹配字符串模式的方法.单个表达式通常被称为regex. 2.python的re模 ...

  6. @RestControllerAdvice作用及原理

    原文:Spring Boot 系列(八)@ControllerAdvice 拦截异常并统一处理 在spring 3.2中,新增了@ControllerAdvice 注解,可以用于定义@Exceptio ...

  7. charles-截取移动端请求-设置代理

    Charles 上的设置 1.    要截取 iPhone 上的网络请求,我们首先需要将 Charles 的代理功能打开.在 Charles 的菜单栏上选择 “Proxy”–>“Proxy Se ...

  8. Jqgrid 序号列宽度调整

    // 遍历jqgrid 使其序号列宽度为45 function setwidth() { $("table[role='grid']").each(function () {//j ...

  9. jeecms 修改后台访问路径

       版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/qq_30553235/article/details/74971414 我使用的是jeecms ...

  10. 取消 ios 上下滑动