headless

CukeTest+Puppeteer的Web自动化测试

那年仲夏 提交于 2020-08-16 07:34:07
测试页面以百度首页为例,我们用CukeTest+Puppeteer编写功能测试Demo,将上篇讲的相关知识点结合起来练手。 CukeTest官方文档: http://www.cuketest.com/zh-cn/ Puppeteer官方文档: https://zhaoqize.github.io/puppeteer-api-zh_CN/ 一、实例1 功能测试:参数化形式打开多个网页 1、打开CukeTest我们来新建一个空项目,安装Node和Puppeteer,注意(两者版本兼容问题),上文中已提到过的。 2、编辑剧本相关参数 3、编写剧本对应的脚本 4、运行 如下图 剧本的文本如下 # language: zh-CN 功能: 百度首页 打开百度首页 @openPage 场景大纲: 页面打开 假如打开百度首页 "<param1>" @pageOne 例子: | param1 | | https://www.baidu.com/ | | https://www.runoob.com/ | @pageTwo 例子: | param1 | | https://www.csdn.net/ | | https://www.cnblogs.com/ | @baiduSearch 场景: 百度首页搜索 打开百度首页,搜索 'puppeteer',百度查询并截图保存结果 假如打开百度首页

spring boot到底干了啥(一)

不想你离开。 提交于 2020-08-15 23:22:21
前言 对于服务端开发来说,新项目大多数都会基于spring boot进行开发。 而是用spring boot的项目一般都会有这么一行代码 SpringApplication.run(TestApplication.class, args); 这是Spring boot框架载入的地方。心血来潮,想看看它到底做了些什么。 new SpringApplication(primarySources)) run 方法会首先创建一个 SpringApplicaition对象,而primarySources 就是我们run方法的第一个参数,比如 TestApplication.class public SpringApplication(ResourceLoader resourceLoader, Class... primarySources) { this.sources = new LinkedHashSet(); this.bannerMode = Mode.CONSOLE; this.logStartupInfo = true; this.addCommandLineProperties = true; this.addConversionService = true; this.headless = true; this.registerShutdownHook = true;

CukeTest+Puppeteer的Web自动化测试(二)

依然范特西╮ 提交于 2020-08-15 13:55:52
  上一篇我们讲了CukeTest+Puppeteer的相关理论知识,带大家认识熟悉了CukeTest如何运行与如何编写剧本,Puppeteer大体的理论体系与如何结合使用,但一直没有给大家进行上手实战操作。这一篇,我就带大家一起来实战燥起来~~~ 测试页面以百度首页为例,我们用CukeTest+Puppeteer编写功能测试Demo,将上篇讲的相关知识点结合起来练手。 CukeTest官方文档: http://www.cuketest.com/zh-cn/ Puppeteer官方文档: https://zhaoqize.github.io/puppeteer-api-zh_CN/ 一、实例1 功能测试:参数化形式打开多个网页   1、打开CukeTest我们来新建一个空项目,安装Node和Puppeteer,注意(两者版本兼容问题),上文中已提到过的。   2、编辑剧本相关参数   3、编写剧本对应的脚本   4、运行 如下图 剧本的文本如下 # language: zh-CN 功能: 百度首页 打开百度首页 @openPage 场景大纲: 页面打开 假如打开百度首页 "<param1>" @pageOne 例子: | param1 | | https: //www.baidu.com/ | | https: //www.runoob.com/ | @pageTwo 例子: |

Puppeteer 入门与实战

六眼飞鱼酱① 提交于 2020-08-14 08:33:19
本文首发于 vivo互联网技术 微信公众号 链接: https://mp.weixin.qq.com/s/P-YdQPOQ9GZgjDEP7VG8ag 作者:Wang Zhenzheng Puppeteer 是 Chrome开发团队2017年发布的一个 Node.js包,提供了一组用来操纵Chrome的API,通俗来说就是一个Headless Chrome浏览器,这Headless Chrome也可以配置成有UI的 。利用Puppeteer可以做到爬取页面数据,页面截屏或者生成PDF文件,前端自动化测试(模拟输入/点击/键盘行为)以及捕获站点的时间线,分析网站性能问题。 一、起因 虽说Puppeteer是Chrome开发团队2017年发布的一个 Node.js包,但是在团队日常工作中基本没有使用。前段时间在开发一个聊天工具的时候,需要引入emoji表情,但是业务方的需求是要使用Google emoji,那我们就需要在 emojipedia 上将这些图保存下来。这么多的图如果一张一张保存,那就枉为开发了。首先想到的是调用该页面的api接口,从接口中拿到对应的emoji地址然后遍历到本地文件。 尴尬的是这个页面是直出的,不是通过接口调用,那就需要我们换个思路,我们发现这些emoji的DOM是在一个class为emoji-grid的ul下,那么如果拿到该ul节点下的全部img的url

Chrome如何设定webdriver=undefined以避免Selenium检测?

柔情痞子 提交于 2020-08-13 19:52:46
Chrome如何设定webdriver=undefined以避免Selenium检测? 一、WebDriver规范 根据 WebDriver规范(https://w3c.github.io/webdriver/#x4-interface) 的描述,WebDriver定义了一个标准方法,以便于文档(document)判断当前浏览器处于自动化控制之中。 这个方法就是检测window.navigator.webdriver的值,正常情况下其值为 undefined ,自动化控制下为 true 。注意,正常情况下不是 false ,在JavaScript中 undefined 为未定义,即该值不存在,而 false 表示一布尔值。 附上规范原文: The webdriver-active flag is set to true when the user agent is under remote control. It is initially false. Defines a standard way for co-operating user agents to inform the document that it is controlled by WebDriver, for example so that alternate code paths can be

对大型网站图片进行爬虫

眉间皱痕 提交于 2020-08-13 08:41:05
目录 1. 前言 2. 常见反爬虫策略 3. 前端与反爬虫 3.1 FONT-FACE拼凑式 3.2 BACKGROUND拼凑式 3.3 字符穿插式 3.4 伪元素隐藏式 3.5 元素定位覆盖式 3.6 IFRAME异步加载式 3.7 字符分割式 3.8 字符集替换式 4.实例:对百度图库进行爬虫 5.总结 1. 前言 对于一张网页,我们往往希望它是结构良好,内容清晰的,这样搜索引擎才能准确地认知它。 而反过来,又有一些情景,我们不希望内容能被轻易获取,比方说电商网站的交易额,教育网站的题目等。因为这些内容,往往是一个产品的生命线,必须做到有效地保护。这就是 爬虫与反爬虫 这一话题的由来。 对于图片进行爬虫整体操作过程可分为三个步骤: 获取页面信息 读取图片链接 将图片保存在本地指定目录下 2. 常见反爬虫策略 但是世界上没有一个网站,能做到完美地反爬虫。 如果页面希望能在用户面前正常展示,同时又不给爬虫机会,就必须要做到识别真人与机器人。因此工程师们做了各种尝试,这些策略大多采用于 后端 ,也是目前比较常规单有效的手段,比如: User-Agent + Referer检测 账号及Cookie验证 验证码 IP限制频次 而爬虫是可以无限逼近于真人的,比如: chrome headless或phantomjs来模拟浏览器环境 tesseract 识别验证码 代理IP淘宝就能买到

使用envoy在k8s中作grpc的负载均衡

岁酱吖の 提交于 2020-08-12 01:12:53
1. 为我们的应用创建headless服务 在Kubernetes中,有一种称为headless服务的特定服务,恰好与Envoy的STRICT_DNS服务发现模式一起使用时非常方便。 Headless服务不会为底层Pod提供单个IP和负载平衡,而只是具有DNS配置,该配置为我们提供了一个A记录,其中包含与标签选择器匹配的所有Pod的Pod IP地址。我们希望在实现负载平衡并自己维护与上游Pod的连接的情况下使用此服务类型,这正是我们使用Envoy可以做到的。 我们可以通过将.spec.clusterIP字段设置为“None”来创建headless服务。因此,假设我们的应用程序pod的标签app的值为myapp,我们可以使用以下yaml创建headless服务。 现在,如果我们在Kubernetes集群中检查服务的DNS记录,我们将看到带有IP地址的单独的A记录。如果我们有3个Pod,则会看到与此类似的DNS摘要。 $ nslookup myapp Server: 10.40 . 0.10 Address: 10.40 . 0.10 # 53 Non - authoritative answer: Name: myapp. namespace .svc.cluster.local Address: 10.36 . 224.5 Name: myapp. namespace .svc

CukeTest+Puppeteer的Web自动化测试

我只是一个虾纸丫 提交于 2020-08-11 09:36:28
测试页面以百度首页为例,我们用CukeTest+Puppeteer编写功能测试Demo,将上篇讲的相关知识点结合起来练手。 CukeTest官方文档: http://www.cuketest.com/zh-cn/ Puppeteer官方文档: https://zhaoqize.github.io/puppeteer-api-zh_CN/ 一、实例1 功能测试:参数化形式打开多个网页 1、打开CukeTest我们来新建一个空项目,安装Node和Puppeteer,注意(两者版本兼容问题),上文中已提到过的。 2、编辑剧本相关参数 3、编写剧本对应的脚本 4、运行 如下图 剧本的文本如下 # language: zh-CN 功能: 百度首页 打开百度首页 @openPage 场景大纲: 页面打开 假如打开百度首页 "<param1>" @pageOne 例子: | param1 | | https://www.baidu.com/ | | https://www.runoob.com/ | @pageTwo 例子: | param1 | | https://www.csdn.net/ | | https://www.cnblogs.com/ | @baiduSearch 场景: 百度首页搜索 打开百度首页,搜索 'puppeteer',百度查询并截图保存结果 假如打开百度首页

12 . Kubernetes之Statefulset 和 Operator

我的未来我决定 提交于 2020-08-10 09:44:27
Statefulset简介 k8s权威指南这样介绍的 “在Kubernetes系统中,Pod的管理对象RC、Deployment、DaemonSet和Job都面向无状态的服务。但现实中有很多服务是有状态的,特别是一些复杂的中间件集群,例如MySQL集群、MongoDB集群、Akka集群、ZooKeeper集群等,这些应用集群有4个共同点。" (1)每个节点都有固定的身份ID,通过这个ID,集群中的成员可以相互发现并通信。 (2)集群的规模是比较固定的,集群规模不能随意变动。 (3)集群中的每个节点都是有状态的,通常会持久化数据到永久存储中。 (4)如果磁盘损坏,则集群里的某个节点无法正常运行,集群功能受损。 如果通过RC或Deployment控制Pod副本数量来实现上述有状态的集群,就会发现第1点是无法满足的,因为Pod的名称是随机产生的,Pod的IP地址也是在运行期才确定且可能有变动的,我们事先无法为每个Pod都确定唯一不变的ID。另外,为了能够在其他节点上恢复某个失败的节点,这种集群中的Pod需要挂接某种共享存储,为了解决这个问题,Kubernetes从1.4版本开始引入了PetSet这个新的资源对象,并且在1.5版本时更名为StatefulSet,StatefulSet从本质上来说,可以看作Deployment[…]”

jmeter无法满足敏捷理念怎么办,使用二次开发集中管理!

亡梦爱人 提交于 2020-08-09 12:40:26
apache jmeter是apache软件基金会出品的一款用于接口测试,压力测试的开源软件,由于其免费开源,插件j自由扩展,跨平台,所以理论上可以支持所有种类的接口测试。jmeter自身也已经提供了许多优秀的插件,极大地增强了jmeter的能力。 问题引入 jmeter提供了两种运行模式,一种是GUI模式,一种是CLI模式,这两种运行模式有各自的场景: GUI-图形用户界面: 顾名思义,用户可以在任意支持java的操作系统上打开一个jmeter客户端,因为GUI模式下提供了可视化的脚本编排工具,因此常用于脚本编排。 CLI: 命令行模式,也叫non-GUI,headless(无头模式),可以在不启动jmeter图形客户端的情况下发起脚本测试,CLI模式是更常用的jmeter运行模式,因为不需要启动图形客户端,所以该模式下占用的资源会更少,是在负载测试和压力测试中最常用的运行模式。 无论使用jmeter执行何种类型的测试,都离不开脚本的编排,GUI模式下固然可以编排脚本,但是这种方式在面对现在越来越盛行的敏捷开发及devops理念时稍微显得心有余而力不足,主要的问题在以下几个方面: 碎片化严重: 当新的需求完成或旧的需求发生变更时,需要重新编排测试脚本,脚本很难管理或碎片化非常严重。 历史记录难以回溯: 每次使用jmeter进行性能测试都会生成新的日志、报告