Python自动化测试文本笔记

本文介绍使用Selenium进行Web自动化测试的方法,包括设置环境、编写测试用例、执行测试及断言验证等关键步骤。同时对比了几种不同的测试框架。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#有道翻译测试实例
from selenium import webdriver
import unittest, time

class YoudaoTest(unittest.TestCase):
    def setUp(self):
        self.driver = webdriver.Firefox()
        self.driver.implicitly_wait(30) #隐性等待时间为30秒
        self.base_url = "http://www.youdao.com"
    
    def test_youdao(self):
        driver = self.driver
        driver.get(self.base_url + "/")
        driver.find_element_by_id("translateContent").clear()
        driver.find_element_by_id("translateContent").send_keys(u"你好")
        driver.find_element_by_id("translateContent").submit()
        time.sleep(3)
        page_source=driver.page_source
        self.assertIn( "hello",page_source) 

    def tearDown(self):
        self.driver.quit()

if __name__ == "__main__":
    unittest.main()
#登录百度测试用例
from selenium import webdriver
import unittest, time

class BaiduTest(unittest.TestCase):
    def setUp(self):
        self.driver = webdriver.Firefox()
        self.driver.implicitly_wait(30) #隐性等待时间为30秒
        self.base_url = "https://www.baidu.com"
    
    def test_baidu(self):
        driver = self.driver
        driver.get(self.base_url + "/")
        driver.find_element_by_id("kw").clear()
        driver.find_element_by_id("kw").send_keys("unittest")
        driver.find_element_by_id("su").click()
        time.sleep(3)
        title=driver.title
        self.assertEqual(title, u"unittest_百度搜索") 

    def tearDown(self):
        self.driver.quit()

if __name__ == "__main__":
    unittest.main()
from selenium import webdriver#导包
import time
driver=webdriver.Chrome()#创建浏览器
driver.get('file:///C:/Users/huawei/Desktop/shanghuihtml/login.html')#发送请求
time.sleep(5)
driver.find_element_by_id('lgusername').send_keys('123456')
driver.find_element_by_id('lgpwd').send_keys('123456')
driver.find_element_by_id('login').click()
driver.find_element_by_xpath('/html/body/div[2]/div[1]/h2/a').click()


time.sleep(5)
driver.quit()#关闭浏览器页面


unittest单元测试

unittest单元测试框架不仅可以适用于单元测试,还可以适用WEB自动化测试用例的开发与执行,该测试框架可组织执行测试用例,并且提供了丰富的断言方法,判断测试用例是否通过,最终生成测试结果。今天笔者就总结下如何使用unittest单元测试框架来进行WEB自动化测试。

具体参考:https://www.cnblogs.com/yufeihlf/p/5707929.html

#功能代码
class Count:
    def __init__(self,a,b):#初始化
        self.a=a
        self.b=b
    def add(self):
        return self.a+self.b
    
#test.py
#测试代码
from cal import Count

class TestCount:
    def test_add(self):
        try:#有可能程序错误的程序放在里面
            count_obj=Count(1,2)
            sumval=count_obj.add()
            assert sumval==3,'func error!'#assert断言
            
        except AssertionError as e:
            print(e)
        else:
            print('通过测试')
        finally:#不管成功失败都得执行
            print('测试程序')
if __name__=='__main__':
    
#unitest编写单元测试框架
import unittest

from cal import Count

class TestCount(unittest.TestCase):
    def setUp(self):#完成环境搭建
        print('测试开始')
        
    def test_add(self):
        count=Count(1,2):
            self.assertEqueal(count.add(),3)
            
    def tearDown(self):#测试结束的清理工作
        print('测试结束')
        
if __name__=='__main__':#单独调用该文件时跑,从其他地方调用时不跑。
    unittest.main()
通俗的理解 __name__ == '__main__':

假如你叫小明.py,在朋友眼中,你是小明(__name__ == '小明');在你自己眼中,你是你自己(__name__ == '__main__')if __name__ == '__main__'的意思是:当 .py 文件被直接运行时,if __name__ == '__main__' 之下的代码块将被运行; 当 .py 文件以模块形式被导入时,if __name__ == '__main__'之下的代码块不被运行。

unittest官方文档

https://blog.youkuaiyun.com/ljl6158999/article/details/80994979

unittest重要概念:

1、test case:一个test case就是一个测试用例

2、test fixture(脚手架):准备和清理工作。完成测试用例环境的搭建和销毁。

3、test suite: 用于组装单个测试用例。通过addTest加载TestCase到test suite中。

4、test runner:用来执行和输出测试结果的组件

#unitest编写单元测试框架
import unittest

from cal import Count

class TestCount(unittest.TestCase):
    def setUp(self):#完成环境搭建
        print('测试开始')
        
    def test_add0(self):
        count=Count(1,2):
            self.assertEqueal(count.add(),3)
    def test_add1(self):
        count=Count(3,4):
            self.assertEqueal(count.add(),7)
           
    def tearDown(self):#测试结束的清理工作
        print('测试结束')
        
if __name__=='__main__':#单独调用该文件时跑,从其他地方调用时不跑。
    #unittest.main()
    #todo 构造参数集
    suite=unittest.TestSuite()
    suite.addTest(TestCount('test.add1'))
    #todo测试执行
    runner=unittest.TextTest
    runner.run(suite)

Python 自动化测试框架。

Robot Framework

Robot Framework 是最流行的 Python 自动化测试框架。它是完全用 Python 开发的,对于验收测试非常有用。这个框架可以运行在 Java 和.NET 环境。它还支持跨平台,例如 Windows、MacOS 和 Linux。这个产品是由世界上一些著名的测试人员创建的,拥有关键词驱动方案。它有如此多可用的工具和库,使得这个框架非常先进和健壮。

它是一个开源框架,并且留有 API 扩展空间。表格式的测试数据语法和关键词驱动测试使得它在全球的测试人员中非常流行。它无疑是最易用的自动化测试框架,并且允许你进行并行测试。

http://robotframework.org/

RedwoodHQ

RedwoodHQ 是一个流行的自动化测试工具,它的流行是由于大部分流行的编程语言都可以用来编写测试,例如 Java、Python、C# 和 likewise。它有一个网站界面,在那里多个测试人员可以在一个平台上协作和运行测试用例。在 RedwoodHQ 中出现的 action 关键字可以用来毫不费力地创建和修改测试用例。你所需要做的只是找到你需要的 action,将它拖到你的测试盒中,然后输入参数并改变它们的值来生成一份完整的测试报告。它有一个内置的 IDE(集成开发环境),你可以在那里创建和修改测试用例,并且并行运行它们。它是对用户最友好或对测试人员最友好的平台之一,它关注一个重大项目的全部测试过程。

http://redwoodhq.com/

Jasmine

Jasmine 对于 JavaScript 单元测试使用行为驱动开发框架。它适用于任何使用 JavaScript 的地方。除了 JavaScript 之外,它还被用于 Python 和 Ruby 自动化测试。因此,它使得你可以并行运行客户端测试用例和服务端测试用例。它是一个将客户端和服务端单元测试结合起来的完美的测试框架,而且被认为是测试领域的未来。它现成可用,除了需要一个名为 Karma 的测试运行器之外,不需要其它外部依赖。

https://jasmine.github.io/

Pytest

如果你的项目比较小、复杂度比较低,Pytest 是最适合的自动化测试平台。非常多的 Python 开发者都喜欢它,他们大部分用它来进行单元测试。它也具有 Robot Framework 所闻名的验收测试能力。Pytest 最好的特性之一是,它提供了测试用例的详细失败信息,使得开发者可以快速准确地改正问题。它兼容最新版本的 Python。它还兼容 unittest、doctest 和 nose,开箱即用。它还有包含更多功能的插件和多样化的现有测试技术和测试用例。事实上,有 300 多个可用插件来自它的活跃社区。该平台设计用于编写更简单错误率更小的代码。你可以将 Pytest 与诸如 Selenium 和 Splinter 之类的图形用户界面一起使用,来使得测试工作更轻松。

http://pytest.org/latest/

结 论

对于任何编程语言来说,都没有绝对理想的测试框架。它取决于开发者的舒适度、项目需求和项目中特定模块所需的测试类型。可用的自动化测试框架有线性自动化、基于模块的测试、函数库框架测试、混合测试、关键词驱动和数据驱动测试等。每个框架都有它的优点和缺点。上面列举的 python 框架是性能最全面的自动化测试框架。

英文原文

https://www.freelancinggig.com/blog/2018/04/20/python-frameworks-available-test-automation/

滚动条模拟

from selenium import webdriver
driver=webdriver.Chrome()
driver.get('http://www.baidu.com')
newstr='alert("ok")'
driver.execute_script(newstr)#调用执行javascript


#滚动条模拟
from selenium inport webdriver
driver=webdriver.Chrome()
driver.get(url='http://www.baidu.com')
driver.find_element_by_id('kw').send_keys('测试')
driver.find_element_by_id('su').click()
time.sleep(2)
js='window.scrollTo(100,400)'
driver.execute_script('js')#
time.sleep(2)
driver.quit()
#pyv8

#'测试'改成开发怎么做

from selenium inport webdriver
driver=webdriver.Chrome()

kw=['测试','开发','产品经理']

driver.get(url='http://www.baidu.com')
driver.find_element_by_id('kw').send_keys('测试')
driver.find_element_by_id('su').click()
time.sleep(2)
js='window.scrollTo(100,400)'
driver.execute_script('js')#
time.sleep(2)
driver.quit()
#pyv8

自动化测试模型

1、线性测试

​ 录制或者编写对应用程序的操作步骤产生相应的线性脚本,每个测试脚本相对独立且不产生其他的应用。就是单纯模拟用户完整的操作场景。

优点:每个脚本都是完整并且可以以独立运行;

缺点:开发成本(大量的重复操作,例入登录与退出)和维护成本很高。

2,模块化驱动测试

​ 封装成函数

​ 借鉴编程思想中模块化的思想,把重复的操作独立成公共的模块,只要应用到模块的内容可以直接使用。

优点:提高开始效率;简化了维护的复杂性;

3、数据驱动测试

​ 解决了脚本重复问题。

​ 自动化测试脚本在开发的过程中,以登录为例,第一次用户名是张三,第二次是王三,用于登录的用户名不同就需要重复书写脚本(权限问题),虽然登录的步骤相同,都是测试的数据不同,数据驱动可以近似看作数据的参数化,根据数据的输入不同,可能引起删除结果的不同。

​ 目的是让测试数据与脚本分离。

4、关键字驱动测试

#模块化驱动测试实例以及驱动测试
from selenium import webdriver
import time
driver=webdriver.Chrome()
def login():
    driver.get('url=http://mail.163.com/')
    frame=driver.find_element_by_css_selector('iframe')
    print(frame)
    driver.switch_to.frame(frame)
    driver.find_element_by_name('email').send_keys(email)
    driver.find_element_by_name('password').send_keys(pwd)
    
if __name__=="__main__":
    login
    

csv:文件读取

import csv
csv.reader(open('./userpwd.csv','r'))
for user in data:
    print(user)

xml文件:成对出现

minidom.py index.xml _csv.pyi/;

<info>
	<project>

	<project>
<info>
#xml文件读取
from xml.dom import minidom
data=minidom.parse('.index.xml')
print(data)
root=data.documentElement
print(root)
print(root.nodeName)
print(root.getElementByTagName('name'))

text:用open读取

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值