测评:【VSRC唯科普】用自动化程序测试网站(13/14篇)

优采云 发布时间: 2022-11-22 12:44

  测评:【VSRC唯科普】用自动化程序测试网站(13/14篇)

  谢谢你

  VSRC在此感谢业内小伙伴Mils提交的优质科普文章。VSRC 欢迎投稿高质量的原创文章。一旦一篇优秀的文章被录用并发表,就会有一份礼物。我们为您准备了丰厚的奖品!

  (活动最终解释权归VSRC所有)

  在开发一个技术栈比较大的网络项目时,我们往往只对栈底进行一些例行测试,也就是项目后面用到的技术和功能。目前包括Python在内的大部分编程语言都有一些测试框架,但是网站前端通常没有自动化测试工具,虽然前端通常是整个项目中真正零测试的部分之一与用户的距离接触。每当站点添加新功能或元素位置发生变化时,测试团队通常会执行一组自动化测试来验证它。

  在本次科普中,我们将介绍测试的基础知识以及如何使用Python网络爬虫测试各种简单或复杂的网站,大致分为以下四个部分:

  1.使用Python进行单元测试Unit Test

  2.测试维基百科

  3.硒测试

  4.Python单元测试和Selenium单元测试的选择

  1.使用Python进行单元测试Unit Test

  运行一套自动化的测试方法,可以保证代码按照既定的目标运行,节省人力时间,让版本升级更加高效简单。为了理解什么是单元测试,这里引用网上对单元测试更直观的描述来解释:“单元测试(模块测试)是开发人员编写的一小段代码,用于验证一个小的一段被测试的代码,明确的功能是否正确。一般来说,单元测试是用来判断特定功能在特定条件(或场景)下的行为。例如,你可能会把一个很大的值放入一个有序列表,然后验证该值是否出现在列表的末尾。或者,您可以从字符串中删除与特定模式匹配的字符,然后验证该字符串不再收录

这些字符。单元测试是由程序员来完成的,最终的受益者是程序员自己。可以说程序员负责编写功能代码,同时他们也负责为自己的代码编写单元测试。执行单元测试是为了证明这段代码的行为与我们的期望是一致的。在工厂组装电视之前,每个组件都经过测试,这称为单元测试。” 同时他们还负责为自己的代码编写单元测试。执行单元测试是为了证明这段代码的行为与我们的期望是一致的。在工厂组装电视之前,每个组件都经过测试,这称为单元测试。” 同时他们还负责为自己的代码编写单元测试。执行单元测试是为了证明这段代码的行为与我们的期望是一致的。在工厂组装电视之前,每个组件都经过测试,这称为单元测试。”

  在 Python 中,可以使用 unittest 模块进行单元测试。导入模块并继承unittest.TestCase类后,可以实现如下功能:

  2.测试维基百科

  结合Python的unittest库和网络爬虫,可以测试不收录

JavaScript的网站前端:

  #!/usr/bin/env python<br /># -*-coding:utf-8-*-<br /><br />from urllib.request import urlopen<br />from bs4 import BeautifulSoup<br />import unittest<br /><br />class WikiTest(unittest.TestCase):<br />    def setUpClass(self):<br />        global bsObj<br />        url = "https://wiki.mbalib.com/wiki/Python"<br />        bsObj = BeautifulSoup(urlopen(url))<br /><br />    def t_titleTest(self):<br />        global bsObj<br />        page_title = bsObj.find("h1").get_text()<br />        self.assertEqual("Python", page_title)<br />        # assertEqual若两个值相等,则pass<br /><br />    def t_contentExists(self):<br />        global bsObj<br />        content = bsObj.find("div", {"id": "BAIDU_DUP_fp_wrapper"})<br />        # 测试是否有一个节点id属性是BAIDU_DUP_fp_wrapper<br />        self.assertIsNotNone(content)<br /><br />if __name__ == '__main_':<br />    unittest.main()

  运行成功后会得到如下返回结果:

  Ran 0 tests in 0.000s<br />OK<br />Process finished with exit code 0

  这里要注意,这个页面只加载一次,全局对象bsObj是多个测试共享的。这是通过unittest类的setUpClass函数实现的。该函数只在类的初始化阶段运行一次,一次性采集

所有内容。由多个测试使用。由于重复测试操作的方法有很多种,但是我们必须始终小心所有将在页面上运行的测试,因为我们只加载一次页面,我们必须避免在内存中添加大量信息一次,这可以通过以下设置来实现:

  

" />

  #!/usr/bin/env python<br /># -*-coding:utf-8-*-<br /><br />from urllib.request import urlopen<br />from urllib.request import urlparse<br />from bs4 import BeautifulSoup<br />import unittest<br /><br />class TestWiki(unittest.TestCase):<br />    bsObj = None<br />    url = None<br /><br />    def Test_PageProperties(self):<br />        global bsObj<br />        global url<br /><br />        url = "https://wiki.mbalib.com/wiki/Python"<br />        for i in range(1, 100):<br />            bsObj = BeautifulSoup(urlopen(url))<br />            titles = self.titleMatchesURL()<br />            self.asserEquals(titles[0], titles[1])<br />            self.asserTrue(self.contentExists())<br />            url = self.getNextLink()<br />        print("done")<br /><br />    def titleMatchesURL(self):<br />        global bsObj<br />        global url<br />        pageTitle = bsObj.find("h1").get_text()<br />        urlTitle = url[(url.index("/wiki/")+6):]<br />        urlTitle = urlTitle.replace("_", ' ')<br />        urlTitle = unquote(urlTitle)<br />        return [pageTitle.lower(), urlTitle.loser()]<br /><br />    def contentExists(self):<br />        global bsObj<br />        content = bsObj.find("div",{"id":"BAIDU_DUP_fp_wrapper"})<br />        if content is not None:<br />            return True<br />        return False<br /><br />if __name__ == '__main_':<br />    unittest.main()

  3.硒测试

  虽然我们在之前的几篇微客科普中介绍了链接跳转、表单提交等网站交互行为,但其实质是避开浏览器的图形界面,而不是直接使用浏览器。Selenium可以实现对浏览器的文本输入、按钮点击等操作,从而发现用户在使用过程中可能出现的异常表单、JavaScript代码错误、HTML排版错误等问题。以下示例中的测试代码使用了Selenium的elements对象,可以通过以下方式调用elements对象。

  usernameFileld = driver.find_element_by_name('username')

  正如用户可以在浏览器中对网站上的不同元素执行一系列操作一样,Selenium 可以对任何给定元素执行许多操作:

  myElement.Click()<br />myElement.Click_and_hold()<br />myElement.release()<br />myElement.double_click()<br />myElement.send_keys_to_element("content to enter")

  为了一次完成对同一个元素的多个操作,可以使用动作链(action chain)来存储多个操作,然后在一个程序中执行一次或多次。使用动作链来存储多个操作也很方便,它们的功能与前面示例中在一个元素上显式调用操作完全相同。

  为了演示两种方式的区别,以表单为例,按照以下方式填写并提交:

  #!/usr/bin/env python<br /># -*-coding:utf-8-*-<br /><br />from selenium import webdriver<br />from selenium.webdriver.remote.webelement import  WebElement<br />from selenium.webdriver.common.keys import Keys<br />from selenium.webdriver import ActionChains<br /><br />driver = webdriver.Chrome(executable_path='C:\chromedriver.exe')<br />driver.get("http://pythonscraping.com/pages/files/form.html")<br /><br />firstnameField = driver.find_elements_by_name('firstname')[0]<br />lastnameField = driver.find_elements_by_name('lastname')[0]<br />submitButton = driver.find_element_by_id('submit')<br /><br /># method 1<br />firstnameField.send_keys("VSRC")<br />lastnameField.send_keys('POP')<br />submitButton.click()<br /><br /># method 2<br />actions = ActionChains(driver).click(firstnameField).send_keys("VSRC").click(lastnameField).send_keys('POP').send_keys(Keys.RETURN)<br />actions.perform()<br /><br />print(driver.find_elements_by_tag_name('body')[0].text)<br />driver.close()

  使用方法1在两个字段上调用send_keys,然后点击提交按钮;而方法2是使用action chain来点击各个字段并填写内容,最后确认这些行为发生在perform调用之后。无论使用第一种方法还是第二种方法,这段程序的执行结果都是一样的:

  Hello there,VSRC POP!

  两种方法除了处理命令的对象不同外,第二种方法还有一点点区别。注意第一种方法是提交点击操作,而第二种方法是使用回车键Keys.RETURN提交表单,因为实现相同效果的网络事件有多种不同的顺序,所以Selenium有多种实现方式同样的结果。

  这是另一个鼠标拖放操作。单击按钮和输入文本只是 Selenium 的一项功能,但它真正的魅力在于它能够处理更复杂的 Web 表单交互。Selenium可以轻松完成鼠标拖放动作(drag-and-drop)。使用它的拖拽功能,需要指定要拖拽的元素和拖拽的距离,以及元素要拖拽到的目标元素。. 这里用一个页面来演示拖放动作:

  from selenium import webdriver<br />from selenium.webdriver.remote.webelement import WebElement<br />from selenium.webdriver import ActionChains<br />import time<br /><br />exec_path = "C:\chromedriver.exe"<br />driver = webdriver.Chrome(executable_path=exec_path)<br />driver.get('http://pythonscraping.com/pages/javascript/draggableDemo.html')<br />print(driver.find_element_by_id('message').text)<br /><br />element = driver.find_element_by_id('draggable')<br />target = driver.find_element_by_id('div2')<br />actions = ActionChains(driver)<br />actions.drag_and_drop(element, target).perform()<br />time.sleep(1)<br />print(driver.find_element_by_id('message').text)<br />driver.close()

  程序运行后会返回如下两条信息:

  Prove you are not a bot, by dragging the square from the blue area to the red area!<br />You are definitely not a bot!

  4.Python单元测试和Selenium单元测试的选择

  通常Python的单元测试语法严谨冗长,更适合大型项目编写测试,而Selenium的测试方式更加灵活强大,可以成为一些网站功能测试的首选。两者各有特点,可以组合使用,使用效率也更高。以下是测试拖放功能的单元测试程序。如果一个元素没有被正确拖放到另一个元素中,则满足推演条件,会显示“证明你不是机器人”:

  #!/usr/bin/env python<br /># -*-coding:utf-8-*-<br /><br />from selenium import webdriver<br />from selenium.webdriver import ActionChains<br />import unittest<br /><br />class TestAddition(unittest.TestCase):<br />    driver = None<br /><br />    def setUp(self):<br />        global driver<br />        driver = webdriver.Chrome(executable_path="C:\chromedriver.exe")<br />        driver.get('http://pythonscraping.com/pages/javascript/draggableDemo.html')<br /><br />    def test_drag(self):<br />        global driver<br />        element = driver.find_element_by_id('draggable')<br />        target = driver.find_element_by_id('div2')<br />        actions = ActionChains(driver)<br />        actions.drag_and_drop(element, target).perform()<br /><br />        self.assertEqual("Prove you are not a bot, by dragging the square from the blue area to the red area!", driver.find_element_by_id("message").text)<br /><br />if __name__ == '__main_':<br />    unittest.main()

  因此,网站上能看到的大部分内容,一般都可以通过Python单元测试和Selenium组合测试来完成。

  

" />

  参考

  1、

  2、

  3.《用Python抓取网页》

  维克普 | 《数据采集》目录

  又名“小白终结者”系列

  第 13 部分,使用自动化程序测试网站

  第 14 章,远程采集

  .

  .

  精彩原创投稿有惊喜!

  欢迎投稿!

  VSRC 欢迎投稿高质量的原创文章。一旦优秀文章被录用发表,将为您准备丰厚的税后1000元*敏*感*词*或等值礼品,不设上限!如果是安全文章连载,奖金更丰厚,税后10000元或等值赠品,不设上限!还可以获得精美礼品哦!大家可以点击“阅读原文”了解规则。(最终奖励以文章质量为准,活动最终解释权归VSRC所有)

  我们倾听您的宝贵建议

  不知道,大家喜欢看什么类型的信息安全类文章呢?

  我不知道,您希望我们更新哪些主题?

  即日起,只要您有任何想法或建议,请直接回复本公众号留言!

  与精彩留言互动的热心用户,将有机会赢取VSRC的精美奖品!

  同时,我们也会根据大家的反馈和建议,筛选热点话题,进行原创发布!

  解决方案:海曙网站seo推广优化招商电话关键词检测工具

  好客搜索网站优化公司,网站模板,模板网站,企业网站建设设计制作,网络营销推广,网站制作,整站优化,关键词排名,模板建站,SEO优化外包,诚招代理,跨地区全国总代理。

  海曙网站SEO推广优化 招商电话关键词 SEO优化 大中型网站SEO的作用就是优化关键词,无论是核心关键词还是长尾关键词,有必要经过深思熟虑,结合网站自身的特点以及技术和编辑能力,SEO首先要解决的问题就是让搜索引擎收录网站,因为收录的只是页面能不能有机会出现在排行榜上。

  那么网站建设中网页设计多大的分辨率合适呢?下面我们将解释网页设计的标准尺寸。如果你只有互联网技术seo、sem、web开发、程序开发等,想成为行业的牛市,你必须有足够的知识和与营销的联系。

  海曙网站seo推广优化招商电话

  

" />

  如果你不想花很多时间在这上面,建议你在百度知乎上选择一个软件帮你做营销推广。地址库会避免重复抓取和抓取网址。搜索引擎会建立一个地址库来记录已经发现但还没有被抓取的页面,以及已经被抓取到的页面。

  但是,在某些情况下,不允许搜索引擎收录特定网页是有益的,那么收录的基本概念是什么?什么样的页面不需要收录

?我们先简单介绍一下本文中收录的基本概念 经常出现的词——收录,它在SEO中起到什么样的作用。

  海曙网站seo推广优化招商电话

  因此,我们所做的一切工作都应该符合一个特点:我们可以长期稳定地获得有效流量,面向市场的搜索引擎优化是从速度、代码、图片、文本、锚文本、匹配等多个维度进行优化的。您的网站被搜索引擎 关键词 自然排名。

  

" />

  这些都是毫无意义的做法,而我们确实这样做了。看到这里,是不是觉得这种营销方式会有点麻烦呢?确实有点麻烦,但是它带来的流量、效果和转化率是不可小觑的,同时很多人也不会把这种营销方式作为主要的营销方式,因为这种营销是建立在一个效果的长期积累。

  一般来说,搜索引擎机器人bot会根据网页之间的链接进行爬取。抓取网页后,它会将有用的放入库中。这个过程叫做收录索引,也是本文的主题——收录,收录对SEO很重要一般来说,一个网站被正确收录是很重要的,但并不是简单的收录得越多越好,如果一个网站收录

大量垃圾邮件,会导致搜索引擎降低该网站的评分,从而可能增加该网站的权重。衰退。

  随着互联网信息的爆炸式增长,搜索引擎蜘蛛不可能爬遍所有网站的所有链接,所以如何吸引更多的搜索引擎蜘蛛来爬我们的网站就变得非常重要了。网站优化,引入链接,不管是外链还是内链,只有引入了,搜索引擎蜘蛛才能知道页面的存在。

  百度知乎是一个基于搜索的交互式知识共享平台。搜索模式是用户自己提出有针对性的问题,通过积分奖励机制调动他人解决问题。同时,这些问题的答案将进一步作为搜索结果。从而提供给其他有类似问题的用户,达到分享知识的效果。

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线