热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

6.10__selenium(4)

一、用例的封装fromseleniumimportwebdriverfromtimeimportsleepclassdiscuz(object):def__init__(self)

一、用例的封装

from selenium import webdriver
from time import sleep
class discuz(object):
def __init__(self): #网站
self.driver=webdriver.Chrome()
self.driver.get('http://192.168.203.128/bbs/')
self.driver.maximize_window()
self.driver.implicitly_wait(10)
def login(self,name,pwd):#登录模块
self.driver.find_element_by_id('ls_username').send_keys(name)
self.driver.find_element_by_id('ls_password').send_keys(pwd)
sleep(2)
self.driver.find_element_by_xpath('/html/body/div[5]/div/div[1]/form/div/div/table/tbody/tr[2]/td[3]/button/em').click()
def fatie(self,title,body): #发帖模块
self.login("")
self.driver.find_element_by_id('subject').send_keys(title)
el=self.driver.find_element_by_id('e_iframe')
self.driver.switch_to.frame(el)
self.driver.find_element_by_xpath('/html/body').send_keys(body)
self.driver.switch_to.default_content()
self.driver.find_element_by_id('postsubmit').click()
def search(self,content):#搜索模块
self.driver.find_element_by_id('scbar_txt').send_keys(content)
self.driver.find_element_by_id('scbar_btn').click()
def personal_center(self): #个人中心模块
self.driver.find_element_by_xpath('//*[@id="um"]/div/a/img').click() #点头像
self.driver.find_element_by_xpath('//*[@id="uhd"]/ul/li[1]/a').click() #主题管理
def news(self):#消息模块
self.driver.find_element_by_xpath('/html/body/div[6]/div/div[1]/div/p[1]/a[3]').click()
self.driver.find_element_by_xpath('//*[@id="ct"]/div[1]/div/ul/li[3]/a').click()
self.driver.find_element_by_xpath('//*[@id="ct"]/div[2]/div[1]/ul/li[3]/a').click()
if __name__ == '__main__':
xk=discuz()
# xk.login('admin','123456')
# sleep(2)
# xk.driver.get('http://192.168.203.128/bbs/forum.php?mod=post&action=newthread&fid=2')
# sleep(2)
# xk.fatie('徐凯大帅哥','是的,没错')
# xk.driver.get('http://192.168.203.128/bbs')
# sleep(3)
# xk.personal_center()
# sleep(2)
#
# xk.news()
# sleep(2)
# xk.driver.get('http://192.168.203.128/bbs')
# sleep(2)
# xk.search('徐凯')
# sleep(2)
==================================================================
二、unittest
1、介绍单元测试框架

单元测试框架
(1)python当总的unittest 框架(讲),pytest框架
a、unittest框架是python自带的库
b、pytest框架是python中第三方库
(2)unittest框架的作用:管理和组织用例
(3)unittest 框架的格式:
import  unittest  #导入unittest                                          
class Uikj(unittest.TestCase):#(定义一个类,一个testcase的实例就是用例)               
    @classmethod                                                       
    def setUpClass(cls) -> None:#类的开始                                  
        print("类的开始")                                                  
    @classmethod                                                       
    def  tearDownClass(cls) -> None: #类的结束                             
        print("类结束")                                                   
                                                                       
    def setUp(self) -> None:                                           
        print("方法的开始")                                                 
    def  tearDown(self) -> None:                                       
        print("方法结束")                                                  
    def  test01(self):                                                 
        print("111")                                                   
    def test03(self):                                                  
        print("333")                                                   
    def test02(self):                                                  
        print("222")                                                   
    def testa(self):                                                   
        print("a")                                                     
    def testA(self):                                                   
        print("A")                                                     
    def dl(self):                                                      
        print("独立")                                                    
if __name__ == '__main__':                                             
    unittest.main()
注意点:
(1)用例执行一定要是test开头;
(2)用例执行的顺序ascii表排序:0-9,A-Z,a-z
(3)类的是开始和类的结束,在框架中只运行一次
(4)方法的开始和方法结束每个用例中都执行
================================================
第二种方法:
设置环境变量

 

 

 

 

 

 

import unittest #导入unittest
class Uikj(unittest.TestCase):#(定义一个类,一个testcase的实例就是用例)
@classmethod
def setUpClass(cls) -> None:#类的开始
print("类的开始")
@classmethod
def tearDownClass(cls) -> None: #类的结束
print("类结束")
def setUp(self) -> None:
print("方法的开始")
def tearDown(self) -> None:
print("方法结束")
def test1(self):
print("111")
def test3(self):
print("333")
def test2(self):
print("222")
def testa(self):
print("a")
def testA(self):
print("A")
def dl(self):
print("独立")
if __name__ == '__main__':
# unittest.main() #第一种方法调用所有的用例
tj=unittest.TestSuite()#创建一个套件对象
# tj.addTest(Uikj("test1")) #添加用例
tj.addTests([Uikj("test1"),Uikj("test2")])
r=unittest.TextTestRunner() #创建一个执行对象
r.run(tj) #运行套件
==================================================
第三种方法:读取路径

import unittest #导入unittest
class Uikj(unittest.TestCase):#(定义一个类,一个testcase的实例就是用例)
@classmethod
def setUpClass(cls) -> None:#类的开始
print("类的开始")
@classmethod
def tearDownClass(cls) -> None: #类的结束
print("类结束")
def setUp(self) -> None:
print("方法的开始")
def tearDown(self) -> None:
print("方法结束")
def test1(self):
print("111")
def test3(self):
print("333")
def test2(self):
print("222")
def testa(self):
print("a")
def testA(self):
print("A")
def dl(self):
print("独立")
if __name__ == '__main__':
# unittest.main() #第一种方法调用所有的用例
# tj=unittest.TestSuite()#创建一个套件对象
# tj.addTest(Uikj("test1")) #添加用例
# tj.addTests([Uikj("test1"),Uikj("test2")])
# r=unittest.TextTestRunner() #创建一个执行对象
#
# r.run(tj) #运行套件
#
lj=r"C:\Users\Administrator\PycharmProjects\gs2\gsml\gs_ui" #相对路径
d=unittest.TestLoader().discover(start_dir=lj,pattern="ui_kuangjian*.py")#
r=unittest.TextTestRunner()
r.run(d)

==================================================
结合测试报告;
测试报告模板:

 

 



==================================================

总结:
一、unittest的介绍
当我们写的用例越来越多时,我们就需要考虑用例编写的规范与组织,以便于后期的维护,而unittest正是这样一款工具
二、unittest是Python自带的标准库中的模块,其中包括:
1、TestCase类
2、TestSuite类
3、TestLoader类
4、TextTestRunner类
5、TextTestResult类
6、TestFixture类
解释下:
TestCase:
一个Testcase的实例就是一个测试用例,测试用例就是一个完整的测试流程,包括初始化setUp、运行run、测试后的还原tearDown
TestSuite:
对一个功能的测试往往需要多测试用例的,可以把多的测试用例集合在一起执行,这就是TestSuite的概念。常用addTest()方法将一个测试用例添加到测试套件中
TextTestRunner:
是用来执行测试用例的,其中的run(test)用来执行TestSuite/TestCase。测试的结果会保存在TextTestResult实例中
TestFixture:
测试准备前要做的工作和测试执行完后要做的工作.包括setUp()和tearDown()。通过覆盖TestCase的setUp和tearDown来实现。
TestLoader:
是用来搜索所有以test开头的测试用例,然后将其加入到testsuite中
图形化解释:如下图

 

 

三、框架的组成
在写测试类以及测试用例时要规定一个命名习惯,一般测试类可以以Test开头,也可以以Test结尾。测试用例一般是以test开头。
eg:结构如下:
import unittest #导入unittest包
#创建测试类:从unittest.TestCase继承
classRomanNumeralConverterTest(unittest.TestCase):
def setUp(self): #初始化测试环境
def tearDown(self): #还原测试环境
def test_case(self):测试用例



推荐阅读
  • 深入理解Vue.js:从入门到精通
    本文详细介绍了Vue.js的基础知识、安装方法、核心概念及实战案例,帮助开发者全面掌握这一流行的前端框架。 ... [详细]
  • Redux入门指南
    本文介绍Redux的基本概念和工作原理,帮助初学者理解如何使用Redux管理应用程序的状态。Redux是一个用于JavaScript应用的状态管理库,特别适用于React项目。 ... [详细]
  • This post discusses an issue encountered while using the @name annotation in documentation generation, specifically regarding nested class processing and unexpected output. ... [详细]
  • 利用CSS3和React实现数字滚动动画组件
    在前端开发中,数字滚动动画是一个常见的需求。本文将详细介绍如何使用CSS3和React构建一个数字滚动动画组件,包括组件的代码实现和样式设计。如果您对HTML版本感兴趣,欢迎留言获取。 ... [详细]
  • 利用Selenium与ChromeDriver实现豆瓣网页全屏截图
    本文介绍了一种使用Selenium和ChromeDriver结合Python代码,轻松实现对豆瓣网站进行完整页面截图的方法。该方法不仅简单易行,而且解决了新版Selenium不再支持PhantomJS的问题。 ... [详细]
  • 深入解析Java枚举及其高级特性
    本文详细介绍了Java枚举的概念、语法、使用规则和应用场景,并探讨了其在实际编程中的高级应用。所有相关内容已收录于GitHub仓库[JavaLearningmanual](https://github.com/Ziphtracks/JavaLearningmanual),欢迎Star并持续关注。 ... [详细]
  • 深入解析SpringMVC核心组件:DispatcherServlet的工作原理
    本文详细探讨了SpringMVC的核心组件——DispatcherServlet的运作机制,旨在帮助有一定Java和Spring基础的开发人员理解HTTP请求是如何被映射到Controller并执行的。文章将解答以下问题:1. HTTP请求如何映射到Controller;2. Controller是如何被执行的。 ... [详细]
  • Python技巧:利用Cookie实现自动登录绕过验证码
    本文详细介绍了如何通过Python和Selenium库利用浏览器Cookie实现自动登录,从而绕过验证码验证。文章提供了具体的操作步骤,并附有代码示例,帮助读者理解和实践。 ... [详细]
  • 深入解析 Android IPC 中的 Messenger 机制
    本文详细介绍了 Android 中基于消息传递的进程间通信(IPC)机制——Messenger。通过实例和源码分析,帮助开发者更好地理解和使用这一高效的通信工具。 ... [详细]
  • 探讨了在 Spring MVC 框架下,JSP 页面使用 标签时遇到的数据无法正确显示的问题,并提供了可能的原因和解决方案。 ... [详细]
  • 本文详细介绍了钩子(hook)的概念、原理及其在编程中的实际应用。通过对比回调函数和注册函数,解释了钩子的工作机制,并提供了具体的Python示例代码,帮助读者更好地理解和掌握这一重要编程工具。 ... [详细]
  • Python自动化测试入门:Selenium环境搭建
    本文详细介绍如何在Python环境中安装和配置Selenium,包括开发工具PyCharm的安装、Python环境的设置以及Selenium包的安装方法。此外,还提供了编写和运行第一个自动化测试脚本的步骤。 ... [详细]
  • 使用JS、HTML5和C3创建自定义弹出窗口
    本文介绍如何结合JavaScript、HTML5和C3.js来实现一个功能丰富的自定义弹出窗口。通过具体的代码示例,详细讲解了实现过程中的关键步骤和技术要点。 ... [详细]
  • 2015款Chromebook Pixel评测:高端Chrome OS笔记本体验
    在笔记本电脑领域,Chromebook Pixel凭借其精致的铝合金外壳、细腻的显示屏和舒适的键盘,成为了外观设计的佼佼者。然而,尽管外观出众,它是否值得购买仍需考量。 ... [详细]
  • Web App vs Native App:未来的移动应用趋势
    随着移动互联网的发展,Web App和Native App之间的竞争日益激烈。对于开发者而言,选择哪一种技术路径更为明智?本文将深入探讨两种应用模式的特点及未来趋势。 ... [详细]
author-avatar
红台门
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有