直接贴代码:

  1. import unittest
    from selenium import webdriver
    from time import sleep
    import os
    import time
  2.  
  3. # 定义打开浏览器的方法,这里用的是Chrome,火狐为Firfox,IE为Ie,必须在根目录下对应的driver才能调用
    dr = webdriver.Chrome()
    # 浏览器最大化
    dr.maximize_window()
  4.  
  5. # 创建测试类LoginCase,用unittest的测试框架的格式
    class LoginCase(unittest.TestCase):
        global path
        path = 'F:/Python_test/'
        # 定义登录方法,被测试用例调用
        def login(self, username, password):
            # 需要测试的网页
            dr.get('https://passport.cnblogs.com/user/signin')
  6.  
  7.         # 需要输入的用户名,变量名和方法中的一致,find_element_by_id('input1')为抓取到的用户名的输入框,用谷歌或者火狐F12可以抓取到
            dr.find_element_by_id('input1').send_keys(username)
  8.  
  9.         # 需要输入的密码,变量名和方法中的一致,find_element_by_id('input2')为抓取到的密码的输入框
            dr.find_element_by_id('input2').send_keys(password)
  10.  
  11.         # 点击登陆按钮,find_element_by_id('signin')为抓取到的登陆按钮,click()为点击事件
            dr.find_element_by_id('signin').click()  # 点击登陆按钮
  12.  
  13.         # 定义测试方法,框架中测试方法以test_开头,底下引号中的中文会在报告中显示,利于清楚的知道测试目的
  14.  
  15.     def test_login_success(self):
            '''用户名、密码正确'''
            self.login('anyXXX', 'XXXXXX')  # 调用定义的login方法,传入正确用户名和密码
            sleep(1)
  16.  
  17.         # 可以用get_screenshot_as_file方法用来截图,可自定义截图后的保存位置和图片命名
            dr.get_screenshot_as_file(path + "login_success.jpg")
  18.  
  19.         # 定义了一个实际值,用谷歌或者火狐F12可以抓取到登陆后显示的用户名,.text是获取地址的文本值
            # assert先判断需要的实际值是否正确,正确,继续运行用例;如果不正确,不继续运行该用例并返回错误
            assert dr.find_element_by_id('lnk_current_user').text, '判断的元素错误,请确认!'
  20.  
  21.         # 将实际值赋值给一个变量link,方便比较,可自定义
            link = dr.find_element_by_id('lnk_current_user').text
  22.  
  23.         # 用assertTrue(x)方法来断言,登录成功后预期的值是否和定义的实际值一致
            self.assertTrue('anyXXX' in link)
  24.  
  25.     def test_login_pwd_error(self):
            '''用户名正确、密码不正确'''
            self.login('1', '1')  # 正确用户名,错误密码
            sleep(1)
            dr.get_screenshot_as_file(path + "login_password_error.jpg")
            assert dr.find_element_by_id("tip_btn").text, '提示信息类型错误!'
            error_message = dr.find_element_by_id('tip_btn').text
            #self.assertIn('用户名或密码错误', error_message)  # 用assertIn(a,b)方法来断言
            assert error_message[0:7],'用户名或密码错误'
  26.  
  27.     def test_login_pwd_null(self):
            '''用户名正确、密码为空'''
            self.login('1', '')  # 密码为空
            sleep(1)
            dr.get_screenshot_as_file(path + "login_password_null.jpg")
            assert dr.find_element_by_id("tip_input2").text, '提示信息类型错误!'
            error_message = dr.find_element_by_id('tip_input2').text
            #self.assertEqual(error_message, '请输入密码')  # 用assertEqual(a,b)方法来断言
            assert error_message, '请输入密码'
  28.  
  29.     def test_login_user_error(self):
            '''用户名错误、密码正确'''
            self.login('1', '1')  # 密码正确,用户名错误
            sleep(1)
            dr.get_screenshot_as_file(path + "login_username_error.jpg")
            assert dr.find_element_by_id("tip_btn").text, '提示信息类型错误!'
            error_message = dr.find_element_by_id('tip_btn').text
            #self.assertIn('该用户不存在', error_message)  # 用assertIn(a,b)方法来断言 a in b
            assert error_message[0:5], '该用户不存在'
  30.  
  31.     def test_login_user_null(self):
            '''用户名为空、密码正确'''
            self.login('', '1')  # 用户名为空,密码正确
            sleep(1)
            dr.get_screenshot_as_file(path + "login_username_null.jpg")
            assert dr.find_element_by_id("tip_input1").text, '提示信息类型错误!'
            error_message = dr.find_element_by_id('tip_input1').text
            #self.assertEqual(error_message, '请输入登录用户名')  # 用assertEqual(a,b)方法来断言
            assert error_message,'请输入登录用户名'
  32.  
  33.     # 每个test_执行完执行一次tearDown()方法
        def tearDown(self):
            sleep(1)
            # refresh()方法为刷新浏览器
            dr.refresh()
            # 关闭浏览器
            dr.quit()
  34.  
  35. if __name__ == '__main__':
        # 导入HTMLTestRunner库,这句也可以放在脚本开头
        import HTMLTestRunner
  36.  
  37.     # 定义脚本标题,加u为了防止中文乱码
  38.  
  39.     report_title = u'登陆模块测试报告'
  40.  
  41.     # 定义脚本内容,加u为了防止中文乱码
        desc = u'博客园登陆模块测试报告详情:'
  42.  
  43.     # 定义date为日期,time为时间
        date = time.strftime("%Y%m%d")
        time = time.strftime("%Y%m%d%H%M%S")
  44.  
  45.     # 定义path为文件路径,目录级别,可根据实际情况自定义修改
        path = 'F:/Python_test/' + date + "/login/" + time + "/"
  46.  
  47.     # 定义报告文件路径和名字,路径为前面定义的path,名字为report(可自定义),格式为.html
        report_path = path + "report.html"
  48.  
  49.     # 判断是否定义的路径目录存在,不能存在则创建
        if not os.path.exists(path):
            os.makedirs(path)
        else:
            pass
  50.  
  51.     # 定义一个测试容器
        testsuite = unittest.TestSuite()
  52.  
  53.     # 将测试用例添加到容器
        testsuite.addTest(LoginCase("test_login_success"))
        testsuite.addTest(LoginCase("test_login_pwd_error"))
        testsuite.addTest(LoginCase("test_login_pwd_null"))
        testsuite.addTest(LoginCase("test_login_user_error"))
        testsuite.addTest(LoginCase("test_login_user_null"))
  54.  
  55.     # 将运行结果保存到report,名字为定义的路径和文件名,运行脚本
        with open(report_path, 'wb') as report:
            runner = HTMLTestRunner.HTMLTestRunner(stream=report, title=report_title, description=desc)
            runner.run(testsuite)
  56.  
  57.     # 关闭report,脚本结束
        report.close()
  58.  
  59. 生成报告为:

python用unittest+HTMLTestRunner的框架测试并生成测试报告的更多相关文章

  1. python用unittest+HTMLTestRunner+csv的框架测试并生成测试报告

    直接贴代码: import csv  # 导入scv库,可以读取csv文件from selenium import webdriverimport unittestfrom time import s ...

  2. Python+selenium+unittest+HTMLTestReportCN单元测试框架分享

    分享一个比较基础的,系统性的知识点.Python+selenium+unittest+HTMLTestReportCN单元测试框架分享 Unittest简介 unittest是Python语言的单元测 ...

  3. Python+Excel+Unittest+HTMLTestRunner实现数据驱动接口自动化测试(一)

    整个流程: 使用HTMLTestRunner的Run方法执行用例,用例调用Excel读取方法,将测试数据导入到unittest用例中执行,测试结果返回给HTMLTestRunner. 因为刚接触接口自 ...

  4. UI测试后生成测试报告,利用shell脚本上传svn

    ui测试后生成测试报告,把报告保存在某一个固定路径 shell脚本把这个报告上传 #!/bin/bash -ile #svn下载文件 #svn checkout http://svn.xxx.com/ ...

  5. Python+Selenium+Unittest+HTMLTestRunner生成测试报告+发送至邮箱,记一次完整的cnblog登录测试示例,

    测试思路:单个测试集.单个测试汇成多个测试集.运行测试集.生成测试报告.发送至邮箱. 第一步:建立单个测试集,以cnblog登录为例. 测试用例: cnblog的登录测试,简单分下面几种情况:(1)用 ...

  6. Appium基于Python unittest自动化测试 & 自动化测试框架 -- PO并生成html测试报告

    基于python单元测试框架unittest完成appium自动化测试,生成基于html可视化测试报告 代码示例: #利用unittest并生成测试报告 class Appium_test(unitt ...

  7. Python + request + unittest实现接口测试框架

    1.为什么要写代码实现接口自动化 大家知道很多接口测试工具可以实现对接口的测试,如postman.jmeter.fiddler等等,而且使用方便,那么为什么还要写代码实现接口自动化呢?工具虽然方便,但 ...

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

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

  9. python:unittest之跳过测试和预期失败的用例

    在利用单元测试框架执行测试用例的过程中,有时只需要执行一部分用例,或者跳过某些暂不需要执行的用例,python的unittest框架就内置这样的功能. 前面的博客介绍了unittest框架的测试用例加 ...

随机推荐

  1. 前端面试(二):N轮面试

    一面 在一面中要掌握什么技巧,主要考察前端开发的基础知识 1.面试技巧.页面布局类 页面布局小结: 语义化掌握到位 页面布局理解深刻 CSS基础知识扎实 思维灵活且积极上进 代码书写规范 2.CSS盒 ...

  2. [js]使用百度编辑器uediter时遇到的一些问题(span,div等被过滤)

    在使用uediter编辑html代码的时候,div,span等标签会莫名其妙的被过滤掉,然后上网查资料,改了点配置: 1:在ueiter.all.js中找到allowDivTransToP me.se ...

  3. 运行APP显示两个APP图标,一个打不开,删除一个后,另一个也会消失。

    可能原因:你添加了两个intent-filter 的LAUNCHER 事件,这种情况尤其在一个项目多个module的时候容易出现 <intent-filter>               ...

  4. package-lock.json和package.json区别

    package.json里面定义的是版本范围(比如^1.0.0),具体跑npm install的时候安的什么版本,要解析后才能决定,这里面定义的依赖关系树,可以称之为逻辑树(logical tree) ...

  5. openstack-----各种系统镜像制作

    本章内容     1.centos镜像制作 2.windows镜像制作 3.ubunt镜像制作 一.centos7镜像制作 1.检查系统是否支持kvm: egrep "(vmx|svm)&q ...

  6. MySql delete和truncate区别

    项目 delete truncate 添加where条件 可以添加 不可以添加 执行效率 略高 高 自增长列 delete删除后,插入数据的自增长 列值从断点开始 truncate删除后,插入数据的自 ...

  7. Shell-cat url-list.txt | xargs wget -c

    假如你有一个文件包含了很多你希望下载的 URL,你能够使用 xargs下载所有链接: cat url-list.txt | xargs wget -c

  8. workqueue --最清晰的讲解

    带你入门: 1.INIT_WORK(struct work_struct *work, void (*function)(void *), void *data) 上面一句只是定义了work和work ...

  9. 正则表达式处理BT的html嵌套问题

    在博问里面求教大神,把问题搞定.在此做个记录备份,也给碰到类似问题的园友提供解决思路. 简化的业务场景就是,在页面html标签中的属性中嵌套了html标签,怎么用用正则表达式过滤闭合的html标签(& ...

  10. mysql开启binlog日志和慢查询日志

    1)首先,为什么要开启binlog日志和慢查询日志呢? binlog日志会记录下数据库的所以增删改操作,当不小心删除.清空数据,或数据库系统出错,这时候就可以使用binlog日志来还原数据库,简单来说 ...