一、生成报告

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. Django之深入了解路由层

    目录 ORM表关系建立 一对一 一对多 多对多 Django 请求生命周期 url 路由层 路由匹配 无名分组 有名分组 反向解析 路由匹配条件无分组的情况的反向解析 无名分组情况的反向解析 有名分组 ...

  2. python2 和Python3 转unicode占位。

  3. linux 软件 手动添加至桌面或启动栏

    1.创建软连接(也可以不用创建软连接,直接写绝对路径) sudo ln -s /opt/eclipse/eclipse /usr/bin/eclipse 2.创建desktop文件 sudo gedi ...

  4. LeeCode-Single Number III

    Given an array of numbers nums, in which exactly two elements appear only once and all the other ele ...

  5. PAT甲级——A1093 Count PAT's【25】

    The string APPAPT contains two PAT's as substrings. The first one is formed by the 2nd, the 4th, and ...

  6. 第二周——1.项目中MySQL版本问题

    1.版本升级 经组长推荐,本地安装的是mysql-8.0.11,而主项目用的还是版本5.6, 因此需要升级版本. 首先,更新驱动:下载mysql-connector-java-8.0.11,将E:\P ...

  7. 关于c.toArray might (incorrectly) not return Object[] (see 6260652)的问题解答

    最近学习jdk1.8源码时,发现ArrayList(Collection<? extends E> c)这个构造函数中,有句有意思的描述:c.toArray might (incorrec ...

  8. <每日一题>题目28:生成随机的测验试卷(单选题)

    #项目:生成随机的测验试卷文件 import random #资料库 capitals = {'北京市':'京','上海市':'沪','天津市':'津','重庆市':'渝','河北省':'冀','山西 ...

  9. 【LGP4389】付公主的背包

    题目 退役前抄一道生成函数快乐一下 就是让我们做一个完全背包,但是朴素的做法显然是\(O(nm)\)的 把每一个物品搞成一个多项式,显然这个多项式所有\(v_i\)的倍数箱为\(1\),剩下的为\(0 ...

  10. 基于baseline和stochastic gradient descent的个性化推荐系统

    文章主要介绍的是koren 08年发的论文[1],  2.1 部分内容(其余部分会陆续补充上来). koren论文中用到netflix 数据集, 过于大, 在普通的pc机上运行时间很长很长.考虑到写文 ...