python+selenium+unittest,python如何使用unittest测试接口_python
python+selenium+unittest,python如何使用unittest测试接口_python详细介绍
本文目录一览: Python自动化测试框架有哪些?
1、Unittest
是python内置的标准类库,它的API跟java的Junit、.net的NUnit、C++的CppUnit很相似,通过继承unittest.TestCase来创建一个测试用例。
2、 Doctest
Doctest模块会搜索那些看起来像交互式会话的python代码片段,然后尝试执行并验证结果,即使从来没有接触过Doctest,我们也可以从这个名字中窥到一丝端倪,它看起来就好像代码里的文档字符串(docstring)一样。
3、py.test
是python的一种单元测试框架,与python自带的unittest测试框架类似,但是比unittest框架使用起来更加简洁、效率更高;根据官方介绍,它具有以下特点:非常容易上手、入门简单、文档丰富,有很多实例可以参考;能够支持简单的单元测试和复杂的功能测试;支持参数化;支持重复执行失败的case。
4、Nose
Nose是对unittest的扩展,使得python的测试更加简单,Nose自动发现测试代码并执行,提供了大量的插件,nose不是python自带模块,需要用pip安装。
5、tox
最大的特色,是自动化测试环境的管理以及使用多个解析器配置进行测试;
6、Unittest2
是Unittest的升级版本,对API进行了改善以及更好的诊断语法。
有很多,目前比较常用的是RobotFramework框架。兼容性很好,同时可以满足java、c、python模块的调用
图形界面,有操作有内置方法函数,很多扩展模块,很方便
1、Pytest
适用于多种软件测试的Pytest,是另一个Python类型的自动化测试框架。凭借着其开源和易学的特点,该工具经常被QA团队、开发团队、个人团队以及各种开源项目所使用。鉴于Pytest具有断言重写之类的实用功能,许多大型互联网应用,如Dropbox和Mozilla,都已经从下面将要提到的unittest切换到Pytest之上。
2、Robot Framework
作为重要的Python测试框架之一,Robot Framework主要被用在测试驱动类型的开发与验收中。虽然是由Python开发而来,但是它也可以在基于.net的IronPython和基于Java的Jython上运行。同时,作为一个Python框架,Robot还能够兼容诸如Windows、MacOS、以及Linux等平台。
3、UnitTest/PyUnit
受到了JUnit启发的UnitTest/PyUnit,也是一种标准化的针对单元测试的Python类自动化测试框架。它的基类TestCase提供了各种断言方法、以及所有清理和设置的例程。因此,TestCase子类中的每一种方法都是以test作为名词前缀,以标识它们能够被作为测试用例所运行。用户可以使用load方法和TestSuite类来分组、并加载各种测试。当然,您也可以通过联合使用,来构建自定义的测试运行器。正如我们使用Junit去测试selenium那样,UnitTest也会用到UnitTest-sml-reporting、并能生成各种xml类型的报告。
4、Behave
我们都知道:行为驱动开发,是一种基于敏捷软件开发的方法。它能够鼓励开发人员、业务参与者和QA人员,三者之间的协作。作为另一种Python测试框架,Behave允许团队避开各种复杂的情况,去执行BDD测试。从本质上说,该框架与SpecFlow和Cucumber非常相似,常被用于执行自动化测试。用户可以通过简单易读的语言来编写测试用例,并能够在其执行期间粘贴到代码之中。而且,那些被设定的行为规范与步骤,也可以被重用到其他的测试方案中。
5、Lettuce
Lettuce是另一种基于Cucumber和Python的行为驱动类自动化工具。Lettuce主要专注于那些具有行为驱动开发特征的普通任务。它不但简单易用,而且能够使得整个测试过程更流畅、甚至更有趣。
怎么用python做自动化测试?
Python是一种广泛使用的编程语言,也被广泛应用于自动化测试领域。以下是用Python进行自动化测试的步骤:
安装 Python环境和所需的测试框架,如unittest、pytest或behave等。
编写测试用例。在编写测试用例时,需要明确测试的目标和预期结果,同时指定测试数据。
建立测试框架。测试框架是负责测试用例的执行、结果处理以及报告生成的重要组成部分。
运行测试用例。使用测试框架来运行测试用例并记录测试结果。
分析测试结果。分析测试结果以确定哪些测试失败,找出失败的原因,并修复故障。
重复测试过程,直到所有测试都通过。
使用Python进行自动化测试的优势在于它非常容易学习和使用,同时还支持各种类型的测试,如单元测试、集成测试和功能测试等。此外,Python还支持各种领域特定语言(DSL),如Behave,能够简化测试脚本的编写。
这里以web自动化测试为例,简单介绍一下如何使用python进行web自动化测试,主要用到selenium这个框架,实验环境win10+python3.6,主要内容如下:
1.首先,安装selenium框架,这个直接在cmd窗口输入命令“pipinstallselenium”就行,如下,安装非常快:
2.安装完成后,还需要安装浏览器驱动程序,不然直接运行程序会报错,以谷歌浏览器chrome为例,需要下载chromedriver驱动程序,如下,这里chromedriver的版本必须要与自己平台浏览器的版本匹配:
下载完成后,是一个zip压缩包,里面就一个chromedriver.exe文件,这里需要将这个文件复制到python安装目录下,如下:
3.最后,我们就可以进行selenium框架测试了,测试代码如下,非常简单,创建一个webdriver,如果能正常打开对应网页,则说明selenium安装成功:
之后就可以直接定位相关元素,进行web自动化测试了,主要方法如下(共有8种),分别是id、name、classname、tagname、linktext、partiallinktext、xpath和cssselector,这里可以自行测试,相关资料非常丰富:
至此,我们就完成了pythonweb自动化测试框架selenium的安装和简单使用。总的来说,整个过程非常简单,只要你有一定的python基础,熟悉一下上面的安装过程,很快就能搭建好本地selenium自动化测试框架,网上也有相关教程和资料,介绍的非常详细,感兴趣的话,可以搜一下,希望以上分享的内容能对你有所帮助吧,也欢迎大家评论、留言进行补充。
python用例并发怎么解决
python-selenium并发执行测试用例(方法一 各模块每一条并发执行)
总执行代码:
# coding=utf-8
import unittest,os,time
import HTMLTestRunner
import threading
import sys
sys.path.append('C:/Users/Dell/Desktop/CARE/program')#使用编辑器,要指定当前目录,不然无法执行第20行代码
def creatsuite():
casedir = []
list = os.listdir(os.path.dirname(os.getcwd()))#获取当前路径的上一级目录的所有文件夹,这里可以改成绝对路径(要搜索的文件路径)
for xx in list:
if "baidu" in xx:
casedir.append(xx)
suite =[]
for n in casedir:
testunit = unittest.TestSuite()
unittest.defaultTestLoader._top_level_dir = None
#(unittest.defaultTestLoader(): defaultTestLoader()类,通过该类下面的discover()方法可自动更具测试目录start_dir匹配查找测试用例文件(test*.py),
并将查找到的测试用例组装到测试套件,因此可以直接通过run()方法执行discover)
discover = unittest.defaultTestLoader.discover(str(n),pattern='tet_*.py',top_level_dir=None)
for test_suite in discover:
for test_case in test_suite:
testunit.addTests(test_case)
suite.append(testunit)
return suite, casedir
def runcase(suite,casedir):
lastPath = os.path.dirname(os.getcwd())#获取当前路径的上一级
resultDir = lastPath+"\\run\\report\\" #报告存放路径
now = time.strftime("%Y-%m-%d %H.%M.%S",time.localtime())
filename = resultDir + now +" result.html"
fp = file(filename, 'wb')
proclist=[]
s=0
for i in suite:
runner = HTMLTestRunner.HTMLTestRunner(stream=fp,title=str(casedir[s])+u'测试报告',description=u'用例执行情况:')
proc = threading.Thread(target=runner.run,args=(i,))
proclist.append(proc)
s=s+1
for proc in proclist:
proc.start()
for proc in proclist:
proc.join()
fp.close()
if __name__ == "__main__":
runtmp=creatsuite()
runcase(runtmp[0],runtmp[1])
python写的selenium测试脚本,run.py文件引测试脚本怎么批量引入?
获取以test开头,以.py结尾的测试用例create_suite 生产测试报告eport_design#coding=utf-8from email.header import Headerfrom email.mime.text import MIMETextfrom HTMLTestRunner import HTMLTestRunnerimport smtplibimport unittestimport timeimport sys#reload(sys)#sys.setdefaultencoding('utf-8')def create_suite():#1.获取框架中脚本的位置script_dir="..Script\\add"#2.获取要运行的脚本 --discoverdiscv=unittest.defaultTestLoader.discover(script_dir,pattern="test_add_*.py")#3.讲获取的脚本加入到测试集合#创建一个测试集合suite=unittest.TestSuite()#循环遍历discv列表中脚本的名字,并加入到suite中for case in discv:#print casesuite.addTest(case)#讲测试集返回return suitedef report_design():global filename,runner,file1now=time.strftime("%Y-%m-%d %H-%M-%S")filename=".\\Ggpt\\add\\"+now+"result.html"file1=open(filename,'wb+') #wb+二进制写入方式#stream 报告文件 title标题 descriptionrunner=HTMLTestRunner(stream=file1,title="selenium_test_report",description="用例执行情况")
为啥用selenium 和python unittest结合
setUp 用于设置初始化的部分,在测试用例执行前,这个方法中的函数将先被调用。这里将浏览器的调用和URL的访问放到初始化部分。
自动化测试-unittest框架,理论和实操双管齐下
unittest
1、什么是Unittest框架?
python自带一种单元测试框架
2、为什么使用UnitTest框架?
>批量执行用例
>提供丰富的断言知识
>可以生成报告
3、核心要素:
1). TestCase(测试用例)
2). TestSuite(测试套件)
3). TestRunner(测试执行,执行TestUite测试套件的)
4). TestLoader(批量执行测试用例-搜索指定文件夹内指定字母开头的模块) 【推荐】
5). Fixture(固定装置(两个固定的函数,一个初始化时使用,一个结束时使用))
接下来会展开 核心要素来认识unittest框架:
首先介绍下unittest的用例规则:
1、测试文件必须导包:import unittest
2、测试类必须继承 unittest.TestCase
3、测试方法必须以 test_开头
一、TestCase(测试用例)
1、是一个代码文件,在代码文件中来书写真正的用例代码 (里面的print均是模拟测试用例)
说明:def 定义的test_ 是测试用例,只有执行 if __name__ == '___mian___' 的时候会执行测试用例,其他普通函数则不执行,通过 self 来调用执行。
二、TestSuite(测试套件)和TestRunner(测试执行)
1、TestSuite(测试套件):用来组装,打包 ,管理多个TestCase(测试用例)文件的
2、TestRunner(测试执行):用来执行 TestSuite(测试套件的)
代码:首先要准备多个测试用例的文件才可以实现TestSuite和TestRunner,以下代码是已经准备了unittest_Demo2和unittest_Demo1两个测试用例文件
三、TestLoader(测试加载)
说明:
2. 搜索指定目录文件下指定字母开头的模块文件下test开始的方法,并将这些方法添加到测试套件中,最后返回测试套件
3. 与Testsuite功能一样,对他功能的补充,用来组装测试用例
一般测试用例是写在Case这个文件夹里面,当测试用例超多的时候就可以考虑 TestLoader
四、Fixture(测试夹具)
是一种代码结构,在某些特定情况下,会自动执行。
4.1 方法级别
在每个测试方法(用例代码)执行前后都会自动调用的结构
def setUp(),每个测试方法执行之前都会执行 (初始化)
def tearDown(),每个测试方法执行之后都会执行 (释放)
特性:几个测试函数,执行几次。每个测试函数执行之前都会执行 setUp,执行之后都会执行tearDwon
4.2 类级别
在每个测试类中所有方法执行前后 都会自动调用的结构(在整个类中 执行之前执行之后各一次)
def setUpClass() ,类中所有方法之前
def tearDownClass(),类中所有方法之后
特性:测试类运行之前运行一次setUpClass ,类运行之后运行一次tearDownClass
注意:类方法必须使用 @classmethod修饰
案列模板:结合了类级别和方法级别实现的
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GBxQV2uP-1380010)(C:/Users/15277/AppData/Roaming/Typora/typora-user-images/image-20220303153824329.png)]
五、断言
1、什么是断言:
让程序代替人工自动的判断预期结果和实际结果是否相符
断言的结果:
1)、True,用例通过
2)、False,代码抛出异常,用例不通过
3)、在unittest中使用断言,需要通过 self.断言方法
2、为什么要断言:
自动化脚本执行时都是无人值守,需要通过断言来判断自动化脚本的执行是否通过
注:自动化脚本不写断言,相当于没有执行测试一个效果。
3、常用的断言:
对于一些未完成的或者不满足测试条件的测试函数和测试类, 不想执行,可以使用跳过
结果
七、数据驱动(unittest ddt)
ddt:data-driver tests
数据驱动:是以数据来驱动整个测试用例的执行, 也就是测试数据决定测试结果
数据驱动解决的问题是:
1)、代码和数据分离,避免代码冗余
2)、不写重复的代码逻辑;
在python解释器中需要安装 ddt 这个包才能用:
要检查是否安装上,在cmd当中 输入 pip list命名,有ddt说明安装成功
语法:
1、使用数据驱动,要在class前加上修饰器 @ddt
说明:方法里面使用 print ,为了方便,模拟测试用例,主要是为了学习数据驱动,实际中方法里面写的是测试用例的代码
1)、结合 selenium 使用 ddt
self:相当于java中的this,当前对象的引用,self.driver定义了driver这个变量。
2、在实际中不可能是单一参数进行传参,将会使用多个参数进行传参:
但是以上步骤都是数据在代码当中的,假如要测试n个手机号这样的数据,全部写在 @data 装饰器里面就很麻烦,这就引出了数据驱动里面的代码和数据的分离。
3、将数据放入一个文本文件中,从文件读取数据, 如JSON、 excel、 xml、 txt等格式文件 ,这里演示的是json文件类型.
json文件处理, 这个链接介绍了json文件和Python文件基本操作
(1)、在json文件驱动
(2)、在测试代码中读取json文件
执行结果:
一行表示一组:
写法一:
写法二:推荐
对应的json文件
写法:
注意:file_date 装饰器,可以直接读取yaml和json文件
建立excel表的时候需要退出pychram在根目录下创建excel表保存,否则会报错
用excel登录csdn操作
用例不可能每一次运行都成功,肯定运行时候有不成功的时候。如果可以捕捉到错误,并且把错误截图保存,这将 是一个非常棒的功能,也会给我们错误定位带来方便
截图方法: driver.get_screenshot_as_file
有两种测试报告:
只有单独运行 TestCase 的代码,才会生成测试报告
这里需要第三方的测试运行类模块,然后放在代码的目录中
就像这两个模块一样放进代码目录中
写法一:
写法二:
这里面的当前路径也可以用 ./ 来表示!!!
注意:
实例化 第三方的运行对象,HTMLTestRunner()的初始化有多种可以自定义设置
最后生成结果
unittest框架就本上就是这些知识了,里面记得东西很多,多敲代码,形成记忆...
python selenium unittest 在第一个用例打开的页面上执行第二用例
那就直接在第一个用例结束后再继续写第二个用例的操作就可以了啊,但这样的话,第一个用例失败就可能会影响到第二个的正常运行,所以还是最好保持每个case之间的独立性
python如何使用unittest测试接口_python
这篇文章主要为大家详细介绍了python如何使用unittest测试接口,具有一定的参考价值,感兴趣的小伙伴们可以参考一下本文实例为大家分享了python使用unittest 测试接口的具体代码,供大家参考,具体内容如下1.首先使用 python 的requests 对接口进行测试# TestInface.py import requests,json url = visit.get_test_url() news_url = url+'news.info' headers = baseToken.basetoken_datas()['headers'] def new_data(data): r = requests.post(news_url,data=data,headers=headers) cnn = json.loads(r.text) return cnn2.使用unittest调用接口,且对接口测试的结果进行统计# TestCase.py # -*- coding:utf-8 -*- import unittest import TestInface # 对执行的case结果进行统计 # --------------------------------------------------------------------------------------------------------------------- text = "" num_success = 0 num_fail = 0 # 测试通过 def decide_success(joggle): global num_success num_success += 1 print_out(joggle + ":接口测试通过") return num_success # 测试不通过 def decide_fail(txt, joggle): global num_fail num_fail += 1 print_out(joggle + ":接口测试未通过 错误信息: " + txt + "") return num_fail # 邮件内容写入 & 客户端输出 def print_out(message): global text text += "" + message return text # 返回值判断 def decide_result(result, code, joggle): if result['code'] == code: decide_success(joggle) return "pass" else: txt = u"期望返回值:" + str(code) + u" 实际返回值:" + str(result) + '' + result['message'] decide_fail(txt, joggle) return "fail" def decide_Count(): data = { 'num_success': num_success, 'num_fail': num_fail, 'text': text } return data # -------------------------------------------------------------------------------------------------------------------- # 定义 unittest class MyTestCase(unittest.TestCase): # 初始化工作 def setUp(self): pass # 退出清理工作 def tearDown(self): pass def test_Case1(self): id = 16 data = {'id':id} a = TestInface.new_data(data) decide_result(a,0,'test_Case1')3.使用suite对case进行管理# TestSuite.py # -*- coding:utf-8 -*- import unittest import TestCase def test_InterFace(): # 构造测试集 suite = unittest.TestSuite() suite.addTest(TestCase("test_Case1")) # unittest中的测试用例 runner = unittest.TextTestRunner() runner.run(suite) #对测试集进行测试需要返回值 # return suite if __name__ == '__main__': # unittest.main(defaultTest='test_InterFace') # 执行测试 runner = unittest.TextTestRunner() runner.run(test_InterFace())4.对接口的数据进行统计# TestCensus.py # -*- coding:utf-8 -*- import time import TestSuite import send_email import TestCase class Test_Calss(): def census(self): text = '' # 初始化测试起始时间 start_time = time.time() # 调用suite测试集 TestSuite.test_InterFace() # 结束执行时间计算 end_time = time.time() result = TestCase.decide_Count() # 接口测试统计说明 total_use_case = u"执行用例总数:" + str(result['num_success'] + result['num_fail']) + u" 通过数:" + str(result['num_success']) + u" 不通过数:" + str(result['num_fail']) total_time = u" 总共耗时:" + str(round((end_time - start_time), 3)) + u'秒' text = result['text'] + total_use_case + total_time print (text) # 发生测试报告邮件 send_email.email_file(text) if __name__ == '__main__': Test_Calss().census()
软件测试工程师需要具备的能力
软件测试在国内还算是朝阳行业,市场人才缺口,发展多元化,角色也很多。
1、测试基础及环境搭建能力
基础能力这块,基本上计算机专业毕业就没有太大,是软件从业者的基本能力。
2、测试常见工具使用
涵盖了功能测试、接口测试、性能测试、web端及app端常见的工具,再补充几个常见的。
3、自动化测试能力
从事自动化测试的话,首先要从语言开始,至少要熟练使用一到两门的脚本语言,不然Java、Python,VB、Javascript等,现在使用python语言随着大数据、人工智能的崛起,也越来越火。
选择一门脚本语言,建议 先从Python入手,可以形成下面的Python技术栈。
web端的自动化测试,建议 Python+selenium+unittest
移动端APP自动化测试,建议 Python+Appium+unittest
接口自动化测试,建议 Python+requests+unittest
性能测试
持续集成/持续开发/docker
Java或者Python栈测试开发
行业知识深耕,掌握行业特点
以上的知识希望可以帮助测试,qa,测试开发人员。
python中的unittest有什么作用
unittest框架介绍
unittest是python自带的单元测试框,具备编写用例、组织用例、执行用例、输出报告等自动化框架的条件,可以用来作自动化测试框架的用例组织执行框架。
python中unittest框架有什么作用?
①提供用例组织与执行:当测试用例只有几条的时候可以不考虑用例的组织,但是当测试用例数量较多时,就需要考虑用例的规范与组织问题,unittest单元测试框架就是用来解决这个问题的。
②提供丰富的断言方法:是测试,就有一个预期结果和实际结果的比较问题。比较就是通过断言来实现,unittest单元测试框架提供了丰富的断言方法,通过捕获返回值,并且与预期值进行比较,从而得出测试通过与否。
③提供丰富的日志:每一个失败用例我们都想要知道失败的原因,所有用例执行结束我们都希望知道整体的执行情况,比如:总体执行时间、失败用例数、成功用例数。unittest单元测试框架为我们提供了这些数据。
python中unittest模块是用来做单元测试的。
unittest是一个python版本的junit,junit是java中的单元测试框架,对java的单元测试,有一句话很贴切:Keep thebar green,相信使用eclipse写过java单元测试的都心领神会。unittest实现了很多junit中的概念,比如我们非常熟悉的test case, test suite等,总之,原理都是相通的,只是用不同的语言表达出来。
下面是一个例子
import randomimport unittestclass TestSequenceFunctions(unittest.TestCase): def setUp(self): self.seq = range(10) def test_shuffle(self): # make sure the shuffled sequence does not lose any elements random.shuffle(self.seq) self.seq.sort() self.assertEqual(self.seq, range(10)) # should raise an exception for an immutable sequence self.assertRaises(TypeError, random.shuffle, (1,2,3)) def test_choice(self): element = random.choice(self.seq) self.assertTrue(element in self.seq) def test_sample(self): with self.assertRaises(ValueError): random.sample(self.seq, 20) for element in random.sample(self.seq, 5): self.assertTrue(element in self.seq)if __name__ == '__main__': unittest.main()