首页 > 编程语言 >python自动化之selenium 自动化unittest框架

python自动化之selenium 自动化unittest框架

时间:2024-11-18 17:10:37浏览次数:1  
标签:python unittest find 用例 dx 自动化 element self def

自动化框架

一、介绍框架

1、unittest 框架是python中自带的框架

2、作用:管理和组织测试用例

当我们写的用例越来越多,我们就要考虑用例的编写的规范和组织,以便于后期的维护

3、常见的自动化框架:po框架、pytest 框架、unittest框架(我们讲解)

4、unitest 框架自带标准的库:有如下

a、TestCase类 (测试用例)
b、TestSuite类 (测试套件)
c、TestLoader类 (测试路径)
d、TextTestRunner类 (测试运行)
e、TextTestResult类 (测试结果)
f、TestFixture类 (测试前后准备)
解释下:
TestCase:
一个Testcase的实例就是一个测试用例,测试用例就是一个完整的测试流程,包括初始化setUp、运行run、测试后的还原tearDown
TestSuite:
对一个功能的测试往往需有多个测试用例,可以把多的测试用例集合在一起执行,这就是TestSuite的概念。常用addTest()方法将一个测试用例添加到测试套件中
TextTestRunner:
是用来执行测试用例的,其中的run(test)用来执行TestSuite/TestCase。测试的结果会保存在TextTestResult实例中
TestFixture:
测试准备前要做的工作和测试执行完后要做的工作.包括setUp()和tearDown()。通过覆盖TestCase的setUp和tearDown来实现。
TestLoader:
是用来搜索所有以test开头的测试用例,然后将其加入到testsuite中去执行

5、unittest的框架的结构:


类的开始

方法的开始
Ran 4 tests in 0.000s
11
方法结束
OK
方法的开始
222
方法结束
方法的开始
a
方法结束
方法的开始
A
方法结束
类的结束
备注:
1、类的开始,类的结束,方法开始,方法结束都可以不写
2、用例要以test开头,如果没有以test开头就不运行
3、test开头的用例运行顺序: 按ascllma标准:0-9 A-Z a-z
4、类的开始,类的结束在整个框架中就运行一次
5、方法开始和方法结束,每一条用例都执行
第二种运行方式(执行单个用例或指定的用例)

解决环境运行问题:只要运行单个用例,解决运行整个框架的用例


第三种运行方法:运行一个路径下所有的用例

第四种方法:运行一个测试报告
import unittest # 导入unittest框架
from time import * #导入时间模块
from ui.HTMLTestRunner3_New import HTMLTestRunner #导入报告模板
class Cms_Test(unittest.TestCase): # 创建一个类,一个testcase就是一个用例
# 类方法
@classmethod
def setUpClass(cls) -> None:
print("类开始")
@classmethod
def tearDownClass(cls) -> None:
print("类的结束")
def setUp(self) -> None:
print("方法的开始")
def tearDown(self):
print("方法结束")
def test1(self):
print("1111")
def test3(self):
print("3333")
def test2(self):
print("2222")
def testa(self):
print("aaaa")
def testA(self):
print("AAAA")
def dcs(self): # 没有以test开头的用例
print("dcs独有")
if name == 'main':
# unittest.main() #第一种执行方法,执行所有的用例
# tj=unittest.TestSuite() # 创建一个套件
# # tj.addTest(Cms_Test('test2')) #通过addtest添加用例到套件中
# tj.addTests([Cms_Test('test2'),Cms_Test('test3')])
# unittest.TextTestRunner().run(tj) #通过TextTestRunner去运行套件中的用例
# path=r"C:\Users\Administrator.USER-20231114RR\PycharmProjects\untitled4\ui" #运行文件的相对路径
# d=unittest.TestLoader().discover(start_dir=path,pattern="ui4.py")
# unittest.TextTestRunner().run(d)
path = r"C:\Users\Administrator.USER-20231114RR\PycharmProjects\untitled4\ui" #运行文件的相对路径
d=unittest.TestLoader().discover(start_dir=path,pattern="ui4
.py") #匹配用例文件
bglj=r"C:\Users\Administrator.USER-20231114RR\PycharmProjects\untitled4\ui" #运行文件的相对路径
new=strftime("%y-%m-%d-%H-%M-%S") # 时间戳
file=bglj+'/'+str(new)+"ui_.html" #file的路径和时间+生成报告的后缀
f=open(file,"bw") #open打开文件,b表示而二进制的方式写入(w)到文件中
r=HTMLTestRunner(
stream=f,title="ui自动化测试报告",description="用例执行情况",
tester="dcs"
)
r.run(d) # run执行 匹配到的用例

案例:

import unittest
from time import *
from selenium import webdriver
class Cms_Test(unittest.TestCase):
@classmethod
def setUpClass(cls) -> None:
pass
@classmethod
def tearDownClass(cls) -> None:
pass
def setUp(self) -> None: #运行前用例的操作
self.dx = webdriver.Chrome()
self.dx.get("http://cms.duoceshi.cn/manage/login.do")
self.dx.find_element_by_name("userAccount").send_keys("admin")
self.dx.find_element_by_name("loginPwd").send_keys("123456")
def tearDown(self) -> None: #运行完一个用例后操作
sleep(5)
self.dx.close() #
def test1_tc(self):
self.dx.find_element_by_xpath("html/body/div/div/form/div[3]/label/input").click()
sleep(2)
self.dx.find_element_by_xpath("html/body/div/div/form/div[4]/input[1]").click()
self.dx.maximize_window()
sleep(2)
self.dx.find_element_by_link_text("退出").click()
def test2_xtgl(self):
self.dx.find_element_by_xpath("html/body/div/div/form/div[3]/label/input").click()
sleep(2)
self.dx.find_element_by_xpath("html/body/div/div/form/div[4]/input[1]").click()
self.dx.maximize_window()
sleep(2)
self.dx.find_element_by_xpath('//*[@id="menu-system"]/dt').click()
sleep(3)
self.dx.find_element_by_link_text("退出").click()

if name == 'main':
unittest.main()
自动化用例编写注意点:
1、一个自动化脚本就是一个完整的场景:从开始—执行过程—结束(退出)
2、一个自动化脚本只验证一个功能点,不要试图把所有功能都写在一个用例中
3、编写自动化用例尽量是正常场景,避免异常场景(用名不填验证登录)
4、自动动化用例直接尽量保证独立性,不要造成一个用例与多个用例产出数据上或业务上的关联,这会给后期带来用例维护上的不便
5、自动化用例的断言,只针对需要断言的地方进行断言(重要环节),没必要在每个环境进行断言验证

import unittest
from time import *
from hzqbao.HTMLTestRunner3_New import HTMLTestRunner
from selenium import webdriver
class Cms_test(unittest.TestCase):
@classmethod
def setUpClass(cls) -> None:
pass
@classmethod
def tearDownClass(cls) -> None:
pass
def setUp(self) -> None:
self.dx = webdriver.Chrome()
self.dx.get("http://192.168.171.130:8080/cms/manage/login.do")
self.dx.find_element_by_id('userAccount').send_keys("admin")
sleep(2)
self.dx.find_element_by_id('loginPwd').send_keys("123456")
sleep(2)
self.dx.find_element_by_xpath('//[@id="loginBtn"]').click()
sleep(2)
def tearDown(self) -> None:
sleep(5)
self.dx.close()
def test1(self):
self.dx.find_element_by_xpath('//
[@id="menu-user"]/dt').click()
sleep(2)
self.dx.find_element_by_xpath('//[@id="menu-user"]/dd/ul/li[1]/a').click()
sleep(2)
self.dx.find_element_by_link_text("退出").click()
def test2(self):
self.dx.find_element_by_xpath('//
[@id="menu-user"]/dt').click()
sleep(2)
self.dx.find_element_by_xpath('//[@id="menu-user"]/dd/ul/li[2]/a').click()
sleep(2)
self.dx.find_element_by_link_text("退出").click()
def test3(self):
self.dx.find_element_by_xpath('//
[@id="menu-user"]/dt').click()
sleep(2)
self.dx.find_element_by_xpath('//[@id="menu-user"]/dd/ul/li[3]/a').click()
sleep(2)
self.dx.find_element_by_link_text("退出").click()
def test4(self):
self.dx.find_element_by_xpath('//
[@id="menu-user"]/dt').click()
sleep(2)
self.dx.find_element_by_xpath('//[@id="menu-user"]/dd/ul/li[4]/a').click()
sleep(2)
self.dx.find_element_by_link_text("退出").click()
def test5(self):
self.dx.find_element_by_xpath('//
[@id="menu-system"]/dt').click()
sleep(2)
self.dx.find_element_by_xpath('//[@id="menu-system"]/dd/ul/li[1]/a').click()
sleep(2)
self.dx.find_element_by_link_text("退出").click()
if name == 'main':
#unittest.main()
path = r"C:\Users\30746\PycharmProjects\baobao\hzqbao"
d = unittest.TestLoader().discover(start_dir=path, pattern="baogao
.py")
bg = r"C:\Users\30746\PycharmProjects\baobao\hzqbao"
new = strftime("%y-%m-%d %H-%M-%S")
file = bg + '/' + str(new) + "hs.html"
f = open(file, "bw")
r = HTMLTestRunner(stream=f, title="ui自动化测试报告",
description="用例执行情况", tester="hzq")
r.run(d)

标签:python,unittest,find,用例,dx,自动化,element,self,def
From: https://www.cnblogs.com/qq3074699547/p/18553134

相关文章

  • 基于python在线考试统计系统(Pycharm Flask Django mysql)
    文章目录项目介绍系统开发技术路线具体实现截图开发技术系统性能核心代码部分展示源码/演示视频获取方式项目介绍系统主要包括首页、个人中心、学生管理、教师管理、班级管理、班级公告管理、考试通知管理、统计成绩管理、留言信息管理、教师评论管理、试题管理、论......
  • 100个Python精选库【建议收藏】
    Python为啥这么火,这么多人学,就是因为简单好学,功能强大,整个社区非常活跃,资料很多。而且这语言涉及了方方面面,比如自动化测试,运维,爬虫,数据分析,机器学习,金融领域,后端开发,云计算,游戏开发都有涉及。大概列了一下整个Python库的应用的方法面面,粗略算算就有20几个方向。左右两边分......
  • Python.gitignore
    #Byte-compiled/optimized/DLLfiles__pycache__/"""Python文件编译后的缓存目录。git上传时会忽略该目录下的文件"""*.py[cod]"""Python文件编译后的字节码文件(如.pyc、.pyo、.pyd)。"""*$py.class """Pyth......
  • 道品科技灌区自动化闸门的研究与应用
    ##引言随着全球水资源短缺问题的加剧,农业灌溉的水管理成为了一个重要的研究领域。灌区自动化闸门作为水利工程中不可或缺的设备,能够实现对灌溉水流的智能控制,提高水资源的利用效率。本文将围绕灌区自动化闸门进行详细探讨,涵盖其一体化设计、结构组成、使用场景等方面,为相关研......
  • Python..gitignore文件
    .gitignore文件#Byte-compiled/optimized/DLLfiles__pycache__/"""Python文件编译后的缓存目录。git上传时会忽略该目录下的文件"""*.py[cod]"""Python文件编译后的字节码文件(如.pyc、.pyo、.pyd)。"""*$py.class "&q......
  • centos7安装python3.11
    1、安装编译环境和依赖包: sudoyumgroupinstall"DevelopmentTools"sudoyuminstallgccopenssl-develbzip2-devellibffi-develwget2、下载Python3.11.4源码包: wgethttps://www.python.org/ftp/python/3.11.4/Python-3.11.4.tgz3、解压源码包: tar-xvfPy......
  • python RSA加密解密
    RSA加密和解密是一种常见的非对称加密方法,主要用于保护数据的安全性。在RSA加密中,使用公钥对数据进行加密,使用私钥进行解密。pipinstallpycryptodomefromCrypto.PublicKeyimportRSAfromCrypto.CipherimportPKCS1_OAEPimportbinasciidefgenerate_keys():#生......
  • 自动化测试工具Ranorex Studio(三十五)-跟踪界面元素
    对于你要测试的应用程序,你可以通过RanorexSpy的元素树手动的引导或使用元素跟踪来识别界面元素。RanorexSpy有两种方法来跟踪界面元素:•   使用TRACK按钮•   即时跟踪使用跟踪按钮点击“TRACK”按钮开始跟踪界面元素。移动鼠标到一个特定的控件(例如:按钮或文本框)......
  • python 获取计算机电脑的配置信息
    获取电脑操作系统、CPU、内存、磁盘等信息。pipinstallplatformpipinstallpsutil通过使用platform库获取基本的操作系统和处理器信息,并使用psutil库检索更多详细的系统资源状态,如CPU频率、内存状态和磁盘使用情况。调用get_computer_config()自定义函数将返回一个包含全......
  • 自动化运维-检测Linux服务器CPU、内存、负载、IO读写、机房带宽和服务器类型等信息脚
    前言:以上脚本为今年8月1号发布的,当时是没有任何问题,但现在脚本里网络速度测试py文件获取不了了,测速这块功能目前无法实现,后面我会抽时间来研究,大家如果有建议也可以分享下。脚本内容:#!/usr/bin/envbash####RED='\033[0;31m'GREEN='\033[0;32m'YELLOW='\033[0;33......