188jsMG纯(银)3D--vs2017 js代码折叠哪个队最有钱

&figure&&img src=&https://pic1.zhimg.com/v2-c137e6183f9bcd_b.jpg& data-rawwidth=&780& data-rawheight=&284& class=&origin_image zh-lightbox-thumb& width=&780& data-original=&https://pic1.zhimg.com/v2-c137e6183f9bcd_r.jpg&&&/figure&&p&如果您正在考虑构建自己的测试自动化框架,请在自荐之前,参考一下以下的六大热门自动化测试框架。&br&&br&在大多数情况下,您将会很好地考虑一个或多个可用的开放源代码选项。这是因为一般来说,框架是可以在团队中使用的一套最佳实践,假设,通用工具和库。很多时候,其实您并不需要一个开发一个独特的测试框架。&/p&&p&您只需要一个框架来帮助您实现自动化测试代码:&/p&&p&&code& 可重复使用&br&&br&
可维护性&br&&br&
稳定&/code& &/p&&p&我看到一些团队通过从头开始构建自己的复杂的自动化框架,花费了大量的功夫去实现这些必备选项。这使我疯狂,因为其实他们可以很容易地利用现有的开源工具和测试库,而不需要编写任何代码就可以满足他们的需求,而在大多数情况下,这些工具和库都能获得更好的结果。&/p&&p&在陷入“构建自己的框架”陷阱之前,请务必查看这六个开源测试自动化解决方案。务必!&/p&&hr&&h2&Serenity&/h2&&p&如果您需要一个基于Java的框架,与诸如Cucumber和JBehave之类的行为驱动的开发工具集成在一起,您可以将测试场景保持在高水平,同时在报告中包含较低级别的实施细节,Serenity可能是您比较好的选择。 &a href=&https://link.zhihu.com/?target=https%3A//link.jianshu.com/%3Ft%3Dhttp%3A//www.thucydides.info/%23/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Serenity&/a&(以前称为Thucydides)是一种开源工具,旨在使验收测试和回归测试更容易。&/p&&p&一个主要的好处是,Serenity作为Selenium WebDriver和BDD工具之上的包装。这使得BDD和Selenium测试变得更简单,因为它抽出了许多有时需要编写的样板代码才能开始使用。 Serenity还提供了许多内置功能,例如提供WebDriver管理,在步骤之间管理状态,截取屏幕,并行运行测试,促进Jira集成以及更多的功能,而无需编写单行代码。&/p&&p&Serenity真正的好处是可以生成非常好的测试报告。开箱即用,使用Serenity来创建文档,不仅可以用于查看您的 Selenium BDD测试结果,还可以作为您的应用程序的文档。&/p&&p&它还有一个额外的注释称为@Step。@Step方法为您提供了一个额外的抽象级别,当正确使用时,可以使您的测试更具可重用性和可维护性。&/p&&p&如果您正在创建自己的BDD框架,Serenity将照顾许多您通常必须从头开始编写的内容。我认为这是非常好用的开源框架之一,但是我可能有点偏见,因为它是我日常测试自动化工作中使用的工具。(此处是作者的介绍,本人还没使用过,国内好像也没怎么听说)&/p&&hr&&h2&Robot Framework&/h2&&p&如果您想使用Python进行测试自动化工作,最好的选择就是&a href=&https://link.zhihu.com/?target=https%3A//link.jianshu.com/%3Ft%3Dhttp%3A//robotframework.org/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Robot Framework&/a&。&/p&&p&Robot Framework 是为测试人员提供了的成熟解决方案; 它使用关键字驱动的方法来使测试可读和易于创建。它还有许多测试库和其他可以使用的工具。&/p&&p&Selenium WebDriver库可能是最常用的外部测试库,但Robot Framework可以测试FTP,MongoDB,Android,Appium等网站以外的其他内容。除了所有这些开放源代码的美妙之处以外,它还有很多API可以帮助它尽可能的扩展。&/p&&p&Robot Framework 是基于Python的,但您也可以使用Jython(Java)或IronPython(.NET)。&/p&&p&Robot Framework 使用的关键字方法对于已经熟悉其他基于供应商的关键字驱动的测试工具的测试人员来说非常有用,使得向开源的过渡更容易。&/p&&p&如果您的团队由大多数测试人员组成,Robot Framework将是您的自动化框架的一个很好的选择。(CC先生觉得这是目前用过的最好的测试框架,没有之一)&/p&&hr&&h2&RedwoodHQ&/h2&&p&&a href=&https://link.zhihu.com/?target=https%3A//link.jianshu.com/%3Ft%3Dhttp%3A//redwoodhq.com/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&RedwoodHQ&/a&与此列表中其他工具的方法略有不同。&br&&br&它创建一个网站界面,允许多个测试人员一起工作,并从一个可访问的网站运行测试。&/p&&p&测试可以用Java / Groovy,Python和C#编写,使用他们的Web IDE测试Web应用程序,其中包括内置的GIT集成。&/p&&p&您可以利用RedwoodHQ现有的操作关键字来快速开始创建和修改测试。&br&&br&要创建测试脚本,只需要找到要执行的操作,将其拖动到测试用例中,然后输入其期望的参数值。&/p&&p&内置IDE还允许您创建和修改测试用例和操作以及执行测试。&br&&br&您还可以并行对预定义的机器执行测试,并查看以前所有测试运行的运行历史记录。&/p&&p&RedwoodHQ对测试人员是友好的,并且有很多内置功能,可以为您的团队创建完整的测试自动化和测试管理解决方案。&/p&&hr&&h2&Sahi&/h2&&p&开发用于测试Web应用程序, &a href=&https://link.zhihu.com/?target=https%3A//link.jianshu.com/%3Ft%3Dhttp%3A//sahipro.com/sahi-open-source/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Sahi&/a&提供开源和专业版。Sahi作为代理服务器,可以让您在浏览器中使用它。您可以从Sahi仪表板启动要测试的浏览器。&/p&&p&Sahi控制器将引导您完成对您的应用程序执行的交互的记录和捕获。例如,当您将鼠标悬停在Sahi浏览器中的任何元素时,它将显示您可以对该特定元素执行的所有操作。您还可以使用控制器播放脚本。&/p&&p&Sahi的记录和播放功能使您可以轻松开始简单的HTML应用程序的测试自动化。但要注意依靠录音和播放; 这种方法已被证明是创建可维护,强大的自动化测试的不良做法。帮助创建初始测试可以,但您需要自定义它,使其可靠和可维护。&/p&&p&我听说过Sahi很多,但是我的第一印象就是它不像其他选择那么强大。然而,很多人都喜欢Sahi专业版。&/p&&hr&&h2&Galen Framework&/h2&&p&如果您的自动化工作专注于用户体验设计(UX)或布局测试,&a href=&https://link.zhihu.com/?target=https%3A//link.jianshu.com/%3Ft%3Dhttp%3A//galenframework.com/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Galen框架&/a&可能完全适合您的需求。&/p&&p&Galen专门为UX测试而创建,并具有特殊的语法和规则,可用于描述和验证应用程序的布局。&br&&br&它还允许您指定浏览器大小,然后根据应用程序运行测试以验证布局规范。&br&&br&Galen测试还生成具有截图的详细HTML报告,它包括与酷热图功能的可视图像比较。&/p&&p&测试可以使用Galen语法,JavaScript或Java编写在一个简单的文本文件中。&/p&&hr&&h2&Gauge&/h2&&p&&a href=&https://link.zhihu.com/?target=https%3A//link.jianshu.com/%3Ft%3Dhttp%3A//getgauge.io/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Gauge&/a&是Mac,Windows和Linux最新的开源测试自动化工具之一,由ThoughtWorks开发,对,就是开发Selenium的那家。&/p&&p&TDD和BDD的簇拥者将欣赏Gauge将创建可被书面化和可执行文档的作为重点。&/p&&p&Gauge的自动化测试用例是依据markdown语法来编写,也支持Java,Ruby和C#语言,可使用现在常用的开发人员IDE(如Eclipse和Visual Studio)。&br&&br&Gauge的功能也可以通过其对插件的支持来扩展。&/p&&p&Gauge还是一个初生期,仍然处于测试阶段,所以如果您的团队想接触一些前沿尖端的测试开发技术,您可以尝试一下。&/p&&p&&br&&/p&&p&&b&&i&CC先生的小黑板&/i&&/b&&/p&&p&综上所述呢,Rotbot Framework还是算比较靠谱的一个自动化测试框架,如有兴趣,你也可以尝试其它的测试框架,毕竟,多态才是这个世界的常态。&/p&&figure&&img src=&https://pic2.zhimg.com/v2-e98c83ccfbcb95ac60ff_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&616& data-rawheight=&193& class=&origin_image zh-lightbox-thumb& width=&616& data-original=&https://pic2.zhimg.com/v2-e98c83ccfbcb95ac60ff_r.jpg&&&/figure&&p&&b&注:&/b&本文由蜗牛学院测试导师 &a href=&https://link.zhihu.com/?target=http%3A//www.woniuxy.com/train/teacher.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&CC老师&/a& 译自 &a href=&https://link.zhihu.com/?target=https%3A//link.jianshu.com/%3Ft%3Dhttps%3A//techbeacon.com/6-top-open-source-testing-automation-frameworks-how-choose& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&6 top open-source testing automation frameworks: How to choose&/a& 首发自个人简书 &a href=&https://link.zhihu.com/?target=http%3A//www.jianshu.com/p/8b4b& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://www.&/span&&span class=&visible&&jianshu.com/p/8b4b61545&/span&&span class=&invisible&&8b9&/span&&span class=&ellipsis&&&/span&&/a&。希望继续在IT行业突破提升自己的各位朋友,也欢迎加群,不管你自我感觉牛不牛B。 &/p&
如果您正在考虑构建自己的测试自动化框架,请在自荐之前,参考一下以下的六大热门自动化测试框架。 在大多数情况下,您将会很好地考虑一个或多个可用的开放源代码选项。这是因为一般来说,框架是可以在团队中使用的一套最佳实践,假设,通用工具和库。很多…
&figure&&img src=&https://pic4.zhimg.com/v2-f5e8fbe788_b.jpg& data-rawwidth=&720& data-rawheight=&346& class=&origin_image zh-lightbox-thumb& width=&720& data-original=&https://pic4.zhimg.com/v2-f5e8fbe788_r.jpg&&&/figure&&p&分享一篇文章,来自于&a href=&http://link.zhihu.com/?target=https%3A//juejin.im/post/5a22af716fb9ac& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&如果有人问你爬虫抓取技术的门道,请叫他来看这篇文章&/a&。&/p&&p&web是一个开放的平台,这也奠定了web从90年代初诞生直至今日将近30年来蓬勃的发展。然而,正所谓成也萧何败也萧何,开放的特型、搜索引擎以及简单易学的html、css技术使得web成为了互联网领域里最为流行和成熟的信息传播媒介;但如今作为商业化软件,web这个平台上的内容信息的版权却毫无保证,因为相比软件客户端而言,你的网页中的内容可以被很低成本、很低的技术门槛实现出的一些抓取程序获取到,这也就是这一系列文章将要探讨的话题—— &b&网络爬虫&/b& 。&/p&&figure&&img src=&http://pic1.zhimg.com/v2-eafc_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&755& data-rawheight=&363& class=&origin_image zh-lightbox-thumb& width=&755& data-original=&http://pic1.zhimg.com/v2-eafc_r.jpg&&&/figure&&p&有很多人认为web应当始终遵循开放的精神,呈现在页面中的信息应当毫无保留地分享给整个互联网。然而我认为,在IT行业发展至今天,web已经不再是当年那个和pdf一争高下的所谓 &b&“超文本”信息载体&/b& 了,它已经是以一种 &b&轻量级客户端软件&/b& 的意识形态的存在了。而商业软件发展到今天,web也不得不面对知识产权保护的问题,试想如果原创的高质量内容得不到保护,抄袭和盗版横行网络世界,这其实对web生态的良性发展是不利的,也很难鼓励更多的优质原创内容的生产。&/p&&p&未授权的爬虫抓取程序是危害web原创内容生态的一大元凶,因此要保护网站的内容,首先就要考虑如何反爬虫。&/p&&h2&&b&从爬虫的攻防角度来讲&/b&&/h2&&p&最简单的爬虫,是几乎所有服务端、客户端编程语言都支持的http请求,只要向目标页面的url发起一个http get请求,即可获得到浏览器加载这个页面时的完整html文档,这被我们称之为“同步页”。&/p&&p&作为防守的一方,服务端可以根据http请求头中的User-Agent来检查客户端是否是一个合法的浏览器程序,亦或是一个脚本编写的抓取程序,从而决定是否将真实的页面信息内容下发给你。&/p&&p&这当然是最小儿科的防御手段,爬虫作为进攻的一方,完全可以伪造User-Agent字段,甚至,只要你愿意,http的get方法里, request header的 &code&Referrer&/code& 、 &code&Cookie&/code& 等等所有字段爬虫都可以轻而易举的伪造。&/p&&p&此时服务端可以利用浏览器http头指纹,根据你声明的自己的浏览器厂商和版本(来自 &code&User-Agent&/code& ),来鉴别你的http header中的各个字段是否符合该浏览器的特征,如不符合则作为爬虫程序对待。这个技术有一个典型的应用,就是 &b&PhantomJS&/b& 1.x版本中,由于其底层调用了Qt框架的网络库,因此http头里有明显的Qt框架网络请求的特征,可以被服务端直接识别并拦截。&/p&&p&除此之外,还有一种更加变态的服务端爬虫检测机制,就是对所有访问页面的http请求,在 &code&http response&/code& 中种下一个 &code&cookie token&/code& ,然后在这个页面内异步执行的一些ajax接口里去校验来访请求是否含有cookie token,将token回传回来则表明这是一个合法的浏览器来访,否则说明刚刚被下发了那个token的用户访问了页面html却没有访问html内执行js后调用的ajax请求,很有可能是一个爬虫程序。&/p&&p&如果你不携带token直接访问一个接口,这也就意味着你没请求过html页面直接向本应由页面内ajax访问的接口发起了网络请求,这也显然证明了你是一个可疑的爬虫。知名电商网站amazon就是采用的这种防御策略。&/p&&p&以上则是基于服务端校验爬虫程序,可以玩出的一些套路手段。&/p&&h2&&b&基于客户端js运行时的检测&/b&&/h2&&p&现代浏览器赋予了JavaScript强大的能力,因此我们可以把页面的所有核心内容都做成js异步请求 &code&ajax&/code& 获取数据后渲染在页面中的,这显然提高了爬虫抓取内容的门槛。依靠这种方式,我们把对抓取与反抓取的对抗战场从服务端转移到了客户端浏览器中的js运行时,接下来说一说结合客户端js运行时的爬虫抓取技术。&/p&&p&刚刚谈到的各种服务端校验,对于普通的python、java语言编写的http抓取程序而言,具有一定的技术门槛,毕竟一个web应用对于未授权抓取者而言是黑盒的,很多东西需要一点一点去尝试,而花费大量人力物力开发好的一套抓取程序,web站作为防守一方只要轻易调整一些策略,攻击者就需要再次花费同等的时间去修改爬虫抓取逻辑。&/p&&p&此时就需要使用headless browser了,这是什么技术呢?其实说白了就是,让程序可以操作浏览器去访问网页,这样编写爬虫的人可以通过调用浏览器暴露出来给程序调用的api去实现复杂的抓取业务逻辑。&/p&&p&其实近年来这已经不算是什么新鲜的技术了,从前有基于webkit内核的&a href=&http://link.zhihu.com/?target=https%3A//link.juejin.im/%3Ftarget%3Dhttp%253A%252F%252Fphantomjs.org%252F& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&PhantomJS&/a&,基于Firefox浏览器内核的&a href=&http://link.zhihu.com/?target=https%3A//link.juejin.im/%3Ftarget%3Dhttps%253A%252F%252Fslimerjs.org%252F& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&SlimerJS&/a&,甚至基于IE内核的&a href=&http://link.zhihu.com/?target=https%3A//link.juejin.im/%3Ftarget%3Dhttps%253A%252F%252Fgithub.com%252Fsdesalas%252FtrifleJS& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&trifleJS&/a&,有兴趣可以看看&a href=&http://link.zhihu.com/?target=https%3A//link.juejin.im/%3Ftarget%3Dhttps%253A%252F%252Fgithub.com%252Fdhamaniasad%252FHeadlessBrowsers& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&这里&/a&和&a href=&http://link.zhihu.com/?target=https%3A//link.juejin.im/%3Ftarget%3Dhttps%253A%252F%252Fgist.github.com%252Fevandrix%252F3694955& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&这里&/a& 是两个headless browser的收集列表。&/p&&p&这些headless browser程序实现的原理其实是把开源的一些浏览器内核C++代码加以改造和封装,实现一个简易的无GUI界面渲染的browser程序。但这些项目普遍存在的问题是,由于他们的代码基于fork官方webkit等内核的某一个版本的主干代码,因此无法跟进一些最新的css属性和js语法,并且存在一些兼容性的问题,不如真正的release版GUI浏览器。&/p&&p&这其中最为成熟、使用率最高的应该当属 &b&PhantonJS&/b& 了,对这种爬虫的识别我之前曾写过&a href=&http://link.zhihu.com/?target=https%3A//link.juejin.im/%3Ftarget%3Dhttps%253A%252F%252Fwww.zhuyingda.com%252Fblog%252Farticle.html%253Fid%253D8& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&一篇博客&/a&,这里不再赘述。PhantomJS存在诸多问题,因为是单进程模型,没有必要的沙箱保护,浏览器内核的安全性较差。&/p&&p&如今Google Chrome团队在chrome 59 release版本中开放了&a href=&http://link.zhihu.com/?target=https%3A//link.juejin.im/%3Ftarget%3Dhttps%253A%252F%252Fdevelopers.google.com%252Fweb%252Fupdates%252F%252Fheadless-chrome& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&headless mode api&/a&,并开源了一个基于Node.js调用的&a href=&http://link.zhihu.com/?target=https%3A//link.juejin.im/%3Ftarget%3Dhttps%253A%252F%252Fgithub.com%252FGoogleChrome%252Fpuppeteer& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&headless chromium dirver库&/a&,我也为这个库贡献了一个&a href=&http://link.zhihu.com/?target=https%3A//link.juejin.im/%3Ftarget%3Dhttps%253A%252F%252Fgithub.com%252FGoogleChrome%252Fpuppeteer%252Fissues%252F560& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&centos环境的部署依赖安装列表&/a&。&/p&&p&headless chrome可谓是headless browser中独树一帜的大杀器,由于其自身就是一个chrome浏览器,因此支持各种新的css渲染特性和js运行时语法。&/p&&p&基于这样的手段,爬虫作为进攻的一方可以绕过几乎所有服务端校验逻辑,但是这些爬虫在客户端的js运行时中依然存在着一些破绽,诸如:&/p&&p&&b&基于plugin对象的检查&/b&&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&if(navigator.plugins.length == 0) {
console.log(&It may be Chrome headless&);
&/code&&/pre&&/div&&p&&b&基于language的检查&/b&&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&if(navigator.languages == &&) {
console.log(&Chrome headless detected&);
&/code&&/pre&&/div&&p&&b&基于webgl的检查&/b&&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&var canvas = document.createElement('canvas');
var gl = canvas.getContext('webgl');
var debugInfo = gl.getExtension('WEBGL_debug_renderer_info');
var vendor = gl.getParameter(debugInfo.UNMASKED_VENDOR_WEBGL);
var renderer = gl.getParameter(debugInfo.UNMASKED_RENDERER_WEBGL);
if(vendor == &Brian Paul& && renderer == &Mesa OffScreen&) {
console.log(&Chrome headless detected&);
&/code&&/pre&&/div&&p&&b&基于浏览器hairline特性的检查&/b&&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&if(!Modernizr[&hairline&]) {
console.log(&It may be Chrome headless&);
&/code&&/pre&&/div&&p&&b&基于错误img src属性生成的img对象的检查&/b&&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&var body = document.getElementsByTagName(&body&)[0];
var image = document.createElement(&img&);
image.src = &http://iloveponeydotcom32188.jg&;
image.setAttribute(&id&, &fakeimage&);
body.appendChild(image);
image.onerror = function(){
if(image.width == 0 && image.height == 0) {
console.log(&Chrome headless detected&);
&/code&&/pre&&/div&&p&基于以上的一些浏览器特性的判断,基本可以通杀市面上大多数 &b&headless browser&/b& 程序。在这一点上,实际上是将网页抓取的门槛提高,要求编写爬虫程序的开发者不得不修改浏览器内核的C++代码,重新编译一个浏览器,并且,以上几点特征是对浏览器内核的改动其实并不小。&/p&&p&更进一步,我们还可以基于浏览器的 &b&UserAgent&/b& 字段描述的浏览器品牌、版本型号信息,对js运行时、DOM和BOM的各个原生对象的属性及方法进行检验,观察其特征是否符合该版本的浏览器所应具备的特征。&/p&&p&这种方式被称为 &b&浏览器指纹检查&/b& 技术,依托于大型web站对各型号浏览器api信息的收集。而作为编写爬虫程序的进攻一方,则可以在 &b&headless browser&/b& 运行时里预注入一些js逻辑,伪造浏览器的特征。&/p&&p&另外,在研究浏览器端利用js api进行 &b&robots browser detect&/b& 时,我们发现了一个有趣的小技巧,你可以把一个预注入的js函数,伪装成一个&b&native function&/b&,来看看下面代码:&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&var fakeAlert = (function(){}).bind(null);
console.log(window.alert.toString());
console.log(fakeAlert.toString());
&/code&&/pre&&/div&&p&爬虫进攻方可能会预注入一些js方法,把原生的一些api外面包装一层proxy function作为hook,然后再用这个假的js api去覆盖原生api。如果防御者在对此做检查判断时是基于把函数&code&toString&/code&之后对&code&[native code]&/code&的检查,那么就会被绕过。所以需要更严格的检查,因为&code&bind(null)&/code&伪造的方法,在&code&toString&/code&之后是不带函数名的。&/p&&h2&&b&反爬虫的银弹&/b&&/h2&&p&目前的反抓取、机器人检查手段,最可靠的还是&b&验证码&/b&技术。但验证码并不意味着一定要强迫用户输入一连串字母数字,也有很多基于用户鼠标、触屏(移动端)等行为的&b&行为验证&/b&技术,这其中最为成熟的当属&a href=&http://link.zhihu.com/?target=https%3A//link.juejin.im/%3Ftarget%3Dhttps%253A%252F%252Fdevelopers.google.com%252Frecaptcha%252F& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Google reCAPTCHA&/a&。&/p&&p&基于以上诸多对用户与爬虫的识别区分技术,网站的防御方最终要做的是&code&封禁ip地址&/code&或是对这个ip的来访用户施以高强度的验证码策略。这样一来,进攻方不得不购买ip代理池来抓取网站信息内容,否则单个ip地址很容易被封导致无法抓取。抓取与反抓取的门槛被提高到了&code&ip代理池&/code&经济费用的层面。&/p&&h2&&b&机器人协议&/b&&/h2&&p&除此之外,在爬虫抓取技术领域还有一个“白道”的手段,叫做&code&robots&/code&协议。你可以在一个网站的根目录下访问&code&/robots.txt&/code&,比如让我们一起来看看&a href=&http://link.zhihu.com/?target=https%3A//link.juejin.im/%3Ftarget%3Dhttps%253A%252F%252Fgithub.com%252Frobots.txt& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&github的机器人协议&/a&,&code&Allow&/code&和&code&Disallow&/code&声明了对各个UA爬虫的抓取授权。&/p&&p&不过,这只是一个君子协议,虽具有法律效益,但只能够限制那些商业搜索引擎的蜘蛛程序,你无法对那些“野爬爱好者”加以限制。&/p&&h2&&b&写在最后&/b&&/h2&&p&对网页内容的抓取与反制,注定是一个魔高一尺道高一丈的猫鼠游戏,你永远不可能以某一种技术彻底封死爬虫程序的路,你能做的只是提高攻击者的抓取成本,并对于未授权的抓取行为做到较为精确的获悉。&/p&&p&这篇文章中提到的对于验证码的攻防其实也是一个较为复杂的技术难点,在此留一个悬念,感兴趣可以加关注期待后续文章进行详细阐述。&/p&&p&另外,欢迎对抓取方面感兴趣的朋友关注我的一个开源项目&a href=&http://link.zhihu.com/?target=https%3A//link.juejin.im/%3Ftarget%3Dhttps%253A%252F%252Fgithub.com%252Fzhuyingda%252Fwebster& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&webster&/a&, 项目以Node.js 结合Chrome headless模式实现了一个高可用性网络爬虫抓取框架,借以chrome对页面的渲染能力, 可以抓取一个页面中 所有的js及ajax渲染的异步内容;并结合redis实现了一个任务队列,使得爬虫程序可以方便的进行横向、纵向的分布式扩展。&/p&&hr&&p&你想更深入了解学习Python知识体系,你可以看一下我们花费了一个多月整理了上百小时的几百个知识点体系内容: &/p&&p&&a href=&http://link.zhihu.com/?target=http%3A//www.magedu.com/73198.html%3FPython_wenzhang_zhihu_jinke_pachongdejishumendao_& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&【超全整理】《Python自动化全能开发从入门到精通》笔记全放送&/a&&/p&
分享一篇文章,来自于。web是一个开放的平台,这也奠定了web从90年代初诞生直至今日将近30年来蓬勃的发展。然而,正所谓成也萧何败也萧何,开放的特型、搜索引擎以及简单易学的html、css技术使得web成为…
&figure&&img src=&https://pic1.zhimg.com/v2-dd857c9ab0d68cc24d1c7f_b.jpg& data-rawwidth=&446& data-rawheight=&275& class=&origin_image zh-lightbox-thumb& width=&446& data-original=&https://pic1.zhimg.com/v2-dd857c9ab0d68cc24d1c7f_r.jpg&&&/figure&&p&&b&总是&/b&碰到很多人在群里和其他地方问&b&为什么&/b&这个会出现错误?&/p&&p&&b&为什么&/b&这个运行不了?&b&为什么&/b&我百度了还是没用?&/p&&p&&br&&/p&&p&其实&b&真正的原因&/b&可能是你忽略了下面这些需要注意的小地方:&br&&/p&&ul&&li&&b&页面分辨率:&/b&&/li&&/ul&&p&通常是计算机的默认分辨率,但是还是会有一些老式电脑存在的情况。&/p&&ul&&li&&b&浏览器的兼容性:&/b&&/li&&/ul&&p&目前市场上的主流浏览器:&b&IE8.0-11&/b&,&b&Chrome&/b&,&b&Firefox&/b&,&b&360&/b&浏览器。通常要保持IE和chrome,firefox浏览器下的兼容性,需要保持页面不变型,js均执行正常。&/p&&p&开发设计组需要制定页面设计规范和js设计规范,保证主流的浏览器页面显示兼容性和js设计兼容性。&/p&&ul&&li&&b&易用性:&/b&&/li&&/ul&&p&Tab键的使用:页面中支持tab按键切换。&/p&&p&Enter键的使用:页面中的某些确定按钮可以使用enter键盘替代。&/p&&p&前进和后退:用户前进和后退有可能会造成数据不完整的提交,重复提交,或者其他的显示问题。&/p&&p&用户删除某个数据前,需要提示用户是否删除,默认焦点选择为“否”。&/p&&p&页面的提示语言,js提示语言,程序提示语言:&/p&&p&提示风格不一样,或者表达不够清晰。&/p&&ul&&li&&b&微软语言标准:&/b&&/li&&/ul&&p&全角字符和半角字符都要使用一个空格分开。&/p&&p&英文和数字直接要有空格分开。&/p&&p&汉字和英文,数字要有空格分开。&/p&&p&带有汉字的话要用全角字符。&/p&&p&语言中不要混用全角和半角标点。&/p&&p&在语言中,永远不要用“你”这个字,要做进一步的步骤描叙的时候,要多用“请”字。&/p&&ul&&li&&b&文字的缩略和折行:&/b&&/li&&/ul&&p&输入框提交很长的字符,并且不折行,则提交后,页面有可能被拉的非常长,如果要将文字后面的一些文字处理为省略号,需要注意不要将中文截成半个字符。&/p&&ul&&li&&b&图片的显示和链接:&/b&&/li&&/ul&&p&图片是否增加链接通常被开发人员忽略。&/p&&p&图片的显示位置通常会显示不同像素大小和比例的图,所以要明确定义图片的处理策略。&/p&&ul&&li&&b&重复提交:&/b&&/li&&/ul&&p&用户提交数据页面,用户有可能连续多次点击提交按钮,造成数据的重复提交。&/p&&p&用户点击“提交”后,将按钮变成Disable状态。&/p&&ul&&li&&b&输入判断问题:&/b&&/li&&/ul&&p&所有键盘输入的特殊字符,均可以正常保存。&/p&&p&需要特别出处理英文单引号,英文双引号等引起的程序错误的问题。&/p&&p&需要处理“&”“/” “”等容易保存出错的符号。&/p&&p&做出特殊模块的字符规划。&/p&&ul&&li&&b&多个IE同时访问的情况:&/b&&/li&&/ul&&p&用户可能打开不同的IE使用相同的账户去进行操作,数据是否一致性和同步的问题。&/p&&p&多个IE使用不同用户,cookie操作会不会出现用户信息混乱的问题。&/p&&ul&&li&&b&安全考虑:&/b&&/li&&/ul&&p&不要把密码等敏感的用户信息明文的显示在url中。&/p&&p&即使是传递密码参数,也不要用pwd,passpord这样的参数名称来进行传递,防止被截获。&/p&&p&要在传递参数的操作中使用NoCache参数,防止将url参数进行缓存。&/p&&ul&&li&&b&防止Sql注入:&/b&&/li&&/ul&&p&不要把&b&数据库&/b&或程序的如何报错信息显示在页面上。&/p&&p&最好程序能够将select、update、delete 这些关键字都过滤掉,不让用户提交包含这些数据的信息。&/p&&p&数据库中设计到操作权限的表名和字段名别用很通俗易懂的名字。&/p&&p&输入框尽量过滤掉“&&”这样的字符,防止javascript攻击。&/p&&ul&&li&&b&关于Cookie:&/b&&/li&&/ul&&p&Cookie没有设定过期时间。&/p&&p&IE不支持Cookie的时候没有如何提示信息。&/p&&p&Cookie中的敏感信息没有进行加密。&/p&&ul&&li&&b&各种资源链接的释放:&/b&&/li&&/ul&&p&有时候系统莫名访问不了,则有可能是数据库的链接没有释放。&/p&&p&&b&压力测试&/b&的时候,连接释放如果效率不高,则有可能出现大量连接超时失败。&/p&&p&预防:系统资源的释放过程,最好通过代码review的方式来互相监督。&/p&&ul&&li&&b&关于Keepalive的设置:&/b&&/li&&/ul&&p&如果需要在一个连接同时获取多个资源,则需要打开apache或resin的Keepalive参数为On,来提高系统的处理能力,减少多次建立连接所消耗的资源,如果大量的处理只是一次性连接,则不要打开。&/p&&p&预防:在实际工作中,需要将keepalive分别设置为On或者Off来验证哪个设置的性能更好。&/p&&p&系统上线后的log配置。&/p&&ol&&li&上线以后,要关闭无用大量调试log信息,不要打开过多的log。近年来,软件测试行业越来越不满足只会点点点的测试了,越来越多的公司开始要求自动化、性能等能力。&/li&&li&如果你还在犹豫我到底要不要提升的时候,那些比你学得更早的,更快的已经把你远远地甩在了后面。&/li&&li&如果你感觉到了紧迫和压力,欢迎加群:大家一起交流自动化的技术,为了更高的薪资,更为了不被行业淘汰!&/li&&/ol&
总是碰到很多人在群里和其他地方问为什么这个会出现错误?为什么这个运行不了?为什么我百度了还是没用? 其实真正的原因可能是你忽略了下面这些需要注意的小地方: 页面分辨率:通常是计算机的默认分辨率,但是还是会有一些老式电脑存在的情况。浏…
&figure&&img src=&https://pic1.zhimg.com/v2-af87a90dcf7ea9a191481_b.jpg& data-rawwidth=&1010& data-rawheight=&638& class=&origin_image zh-lightbox-thumb& width=&1010& data-original=&https://pic1.zhimg.com/v2-af87a90dcf7ea9a191481_r.jpg&&&/figure&&h2&&b&手工测试的迷茫:除了重复劳动,到底还有什么?&/b&&/h2&&p&我是在2008年毕业的,三本的学校,不上不下的专业水平,毕业的时候,恰好遇到了金融危机。校园招聘里阴差阳错的巧合,让我走上了软件测试工程师的道路。&/p&&p&入职第一天,来了个高大上的讲师,记得他是这么说的:&/p&&blockquote&“软件测试的要求非常高,做好软件测试很不容易”、“国外的软件测试,很多都由多年经验的资深开发人员来做的”、“软件质量与测试非常的重要”、“软件工程离不开测试”、“测试用例的设计方法有xxx、xxx、xxx、xxx”。&/blockquote&&p&依稀记得培训的最后还提到了高端而且神秘的自动化测试、性能测试、安全测试。刚毕业的我们上完课都很高兴,原来我们做的工作这么有前途啊。心里更是暗暗下了决心,要把工作做好,争取早日加工资。。。嗯,当然重点是早日加工资。&/p&&p&然而才真正工作了半年,我就发现了一个问题:每天我怎么就在做一些一模一样的事啊。每天有点不完的网页,写不完的文档。培训时说好的高大上呢,说好的自动化测试、性能测试、安全测试呢?&/p&&p&09年的时候,测试人员都爱去某论坛上交流,我至今记忆犹新的是,整个版面打开来,一半是问大家薪资多少了,另一半是“工作n年了,感觉很迷茫”。每个人对迷茫的描述都不一样,但问题本质都一样:除了重复劳动,我们还有什么?&/p&&p&&b&一个软件测试人员,有什么是拿得出手的核心技术,有什么东西能使你区别于应届生?&/b&&/p&&p&当时我就有个想法,我不想一直做重复劳动了,即使我在入职时是声称我胜任并且善于应付重复劳动的。然而我并不擅长机械和重复的劳动,也不喜欢重复劳动。&/p&&p&&br&&/p&&h2&&b&自动化测试的困惑:自动化到底是什么?&/b&&/h2&&p&&b&我有一个核心观点:软件测试的核心是效率。而不是什么设计方法,也不是什么测试思路。&/b&&/p&&p&不管你有没有方法,有没有思路,只要时间花下去,总能找到bug。这也是为什么很多时候,测试人员累死累活测了半天的应用。来一个外行的xx总监,随便点开来就能发现一两个测试人员漏掉的bug。久而久之总监们就会质疑,测试人员到底有什么用,这么明显的问题发现不了。&/p&&p&然而事实上,发现一个问题不难,发现一百个问题也不难,难的是在有限的时间里发现足够多的问题。也就是说,外行也能找到bug,但外行不可能在有限的时间内找到足够多的反映软件质量问题的信息。&/p&&blockquote&”是雇十个应届生点点点来测,还是雇三个资深测试来做系统化的测试?“、”是买商业工具做自动化,还是自己研发测试工具自己搞一套?“&/blockquote&&p&软件测试一切的一切都是围绕着效率这个点来思考的。&/p&&p&也正是为了提高效率,测试必须要引入自动化的手段。注意,不是替代不替代手工测试的问题,而是必须引入自动化才能进一步提高效率。手工测试仍然在,只要他在一些领域上效率高于自动化,就仍然会继续存在下去。&/p&&p&自动化测试,并不是QTP,不是selenium,不是任何一种工具。&/p&&p&自动化测试,并不是回归测试,不是冒烟测试,不是任何一种测试阶段或类型。&/p&&p&&b&自动化是一种提高效率的方法和理念。&/b&自动化测试,仅仅是自动化的一种应用。从自动化测试开始,自动化部署,自动化发布,自动化日志收集,自动化环境管理,等等,越来越多的东西都在被自动化。这些自动化的东西我把他们划分到一起,他们的学习方法都是一样的,理念都是类似的。用到的开发语言也都是通用的。可能这些领域以后真的会融合成为一个技术领域。&/p&&h2&&b&职业转型的路,到底该怎么走?&/b&&/h2&&p&之前,我已经写过了自动化测试的学习路线:&a href=&https://www.zhihu.com/question//answer/& class=&internal&&如何学习自动化测试?&/a&&/p&&p&另外在本专栏里也发布了我总结的自动化测试基础系列:&/p&&p&&a href=&https://zhuanlan.zhihu.com/p/& class=&internal&&接口测试基础&/a&,&a href=&https://zhuanlan.zhihu.com/p/& class=&internal&&配置管理基础&/a&,&a href=&https://zhuanlan.zhihu.com/p/& class=&internal&&持续集成基础&/a&,&a href=&https://zhuanlan.zhihu.com/p/& class=&internal&&性能测试基础&/a&,&a href=&https://zhuanlan.zhihu.com/p/& class=&internal&&python基础&/a&,&a href=&https://zhuanlan.zhihu.com/p/& class=&internal&&selenium基础&/a&等等,后续还会继续补充。&/p&&p&其实这些都掌握的话,你已经可以轻松地完成转型了。唯一的问题就是掌握这些东西的过程不是那么轻松。我一直认为,技术培训并不应去做知识的灌输,技术知识,是灌输不进去的;谁也不能代替你看完那一篇帮助文档。技术培训分享最重要的是帮助大家培养自己的自学能力,带大家入个门,入了门,有了自学能力,再加上正确的方向,最终我们都能提高技术水平,到达自己想要的高度。&/p&&p&&br&&/p&&h2&&b&最后&/b&&/h2&&p&我从自己开始转型的2010年到真正理解了自动化的2014年,再到一直做自动化,做到转型为devops的现在2017年。这中间真是走了很多弯路,踩了很多坑,接触过各种公司和项目:小到初创企业,大到跨国公司,外资,内资,合资,人力外包,项目外包,电商网站,互联网金融,云计算平台。主要用过四种语言,十几种工具,见过各种历史遗留框架、工具、平台,写过大大小小的类库、工具、改造过平台。虽然我只工作了9年,但换了7次单位,真是说多了都是泪啊。。。&/p&&p&&br&&/p&&p&我这次想分享的,是我当时转型的经历、对现在测试行业技术大方向的分析和转型方向的建议。另外通过这次分享也希望揭开自动化测试、测试开发、持续集成等等的神秘面纱,让大家了解真实的自动化测试相关人员的工作是怎样的,供大家在自己转型时参考。&/p&&p&&br&&/p&&p&感谢知乎提供平台,我将于&b&日晚上9点&/b&,为大家做一场关于测试人员职业转型的live分享:手工测试如何转向自动化测试 。欢迎大家来一起参加和交流。&/p&&p&&b&Live地址:&/b&&a href=&https://www.zhihu.com/lives/024768& class=&internal&&手工测试如何转向自动化测试&/a&&/p&&p&&br&&/p&&p&本次live适合:&/p&&p&1.想从手工测试转型自动化测试的测试人员;&/p&&p&2.想了解自动化测试/测试开发的工作到底是什么样的的人。&/p&&p&而本次live并不会包括让人一下子就完成职业转型的神技,我这里能做的只是帮你少走弯路,仅此而已。&/p&
手工测试的迷茫:除了重复劳动,到底还有什么?我是在2008年毕业的,三本的学校,不上不下的专业水平,毕业的时候,恰好遇到了金融危机。校园招聘里阴差阳错的巧合,让我走上了软件测试工程师的道路。入职第一天,来了个高大上的讲师,记得他是这么说的:“…
&figure&&img src=&https://pic3.zhimg.com/v2-b54e9bf3b2b623aad7e694ab_b.jpg& data-rawwidth=&748& data-rawheight=&353& class=&origin_image zh-lightbox-thumb& width=&748& data-original=&https://pic3.zhimg.com/v2-b54e9bf3b2b623aad7e694ab_r.jpg&&&/figure&&p&&/p&&p&这一篇讲一讲持续集成的基础。没有持续集成,做自动化是不完整的,为了减少人工介入和提高迭代速度,现在越来越多的公司引入了持续集成系统。如果你自动化测试入了,下一步就是搞一个持续集成系统,不要再手工在本地触发你的自动化测试脚本啦。&/p&&p&&br&&/p&&p&&b&一、持续集成之前&/b&&/p&&p&首先,看一下没有引入持续集成之前自动化测试是怎样做的:&br&&/p&&p&&br&&/p&&figure&&img src=&https://pic3.zhimg.com/v2-51fe84fd45a99d8fdc5b4cdf4962840b_b.jpg& data-caption=&& data-rawwidth=&885& data-rawheight=&471& class=&origin_image zh-lightbox-thumb& width=&885& data-original=&https://pic3.zhimg.com/v2-51fe84fd45a99d8fdc5b4cdf4962840b_r.jpg&&&/figure&&p&&br&&/p&&p&这里引入了测试机的概念,测试机是指我们执行自动化测试脚本的环境。比如,我在自己电脑上执行一个selenium脚本做自动化测试,那测试机就是我的电脑。&/p&&p&&br&&/p&&p&测试人员在测试机上手工触发测试执行工具去执行某个自动化测试。并在测试执行完毕后由测试执行工具给出测试结果。&br&&/p&&p&&br&&/p&&p&那么这里有几个问题:&/p&&ol&&li&我测试机上的测试脚本是不是最新版?&/li&&li&测试机上跑出来的测试结果保存在哪里,以后还能翻阅吗?&/li&&li&这次测试测了服务器代码的哪个版本?&/li&&li&如果我想让工具半夜自动执行这些测试可以吗?&br&&/li&&/ol&&p&等等,问题还有很多。&/p&&p&&br&&/p&&p&以上,在持续集成之前的自动化测试有很多问题需要解决。而持续集成可以很好地解决上述问题。&br&&/p&&p&&b&二、持续集成之后&/b&&/p&&p&当你引入了持续集成工具之后,初步的持续集成测试流程是这样的:&br&&/p&&p&&br&&/p&&figure&&img src=&https://pic3.zhimg.com/v2-7d120b86e23ab6ff82694debee997fc0_b.jpg& data-caption=&& data-rawwidth=&922& data-rawheight=&423& class=&origin_image zh-lightbox-thumb& width=&922& data-original=&https://pic3.zhimg.com/v2-7d120b86e23ab6ff82694debee997fc0_r.jpg&&&/figure&&p&&br&&/p&&p&和之前的流程最大的不同是,测试不再由人工触发,测试结果被收集到持续集成系统中展示。&/p&&p&&br&&/p&&p&让我们再从整个项目的持续集成角度来看引入持续集成后的整个过程:&/p&&p&&br&&/p&&figure&&img src=&https://pic2.zhimg.com/v2-1fc1419883aac50ea93af808b62ac686_b.jpg& data-caption=&& data-rawwidth=&1027& data-rawheight=&666& class=&origin_image zh-lightbox-thumb& width=&1027& data-original=&https://pic2.zhimg.com/v2-1fc1419883aac50ea93af808b62ac686_r.jpg&&&/figure&&p&&br&&/p&&p&&br&&/p&&p&为了让描述更简单,以下用jenkins代替了持续集成系统,用git代表配置管理工具,一个简化过的持续集成流程是这样的:&/p&&p&&br&&/p&&p&首先,由jenkins在测试机上(通常是一个jenkins&br&&br&slave),把待测软件的源代码从git里checkout,然后执行单元测试。单元测试通过后,源代码被部署到服务器上,之后开始系统测试。系统测试以自动化的形式执行,首先也是jenkins把测试脚本从git里checkout,然后调用测试执行工具执行测试,并生成报告。最后由测试执行工具生成的报告被jenkins收集起来,并展示在jenkin里。&/p&&p&&br&&/p&&p&于是,之前的问题都有了答案:&/p&&p&&br&&/p&&p&1.我测试机上的测试脚本是不是最新版?&/p&&p&git插件保证你执行的一定是最新版。(当然也可以自己指定版本)&br&&/p&&p&2.测试机上跑出来的测试结果保存在哪里,以后还能翻阅吗?&/p&&p&结果自动收集在jenkins上,当然你还可以从jenkins上把结果再收集起来放到独立的存储空间里。&br&&/p&&p&3.这次测试测了服务器代码的哪个版本?&/p&&p&git会checkout待测软件代码,然后开始整个流程,所以测试了待测软件的哪个版本只要看一下上游的记录就知道了。&br&&/p&&p&4.如果我想让工具半夜自动执行这些测试可以吗?&/p&&p&当然,持续集成系统提供定时触发方式来触发整个流程。(也提供其他触发方式。)&/p&&p&&br&&/p&&p&最后,以上的持续集成流程图,是简化过的。实际上在一个真实系统里,这个流程一步一步,是比较长的。还要考虑各个测试环境的管理,代码配置管理策略,jenkins的使用策略,各种静态分析,资源监控等等。但如果你想做持续集成,不妨从一个简单的流程开始。我会在后续的文章里先把各种自动化测试基础理论介绍完,之后再涉及复杂的内容的探讨,敬请期待。&br&&/p&&p&&b&三、关于如何学习持续集成&br&&/b&&/p&&p&前面已经讲了,持续集成之前和之后,整个自动化测试流程乃至待测软件版本发布过程有了很大的变化。&/p&&p&&br&&/p&&p&那么持续集成到底是干什么的呢? 一般我们理解,就是为了加快迭代速度,尽早开始测试,尽早得到反馈,以最终提高交付的软件的质量。这个问题我记得我去应聘持续集成测试工程师时也被问到过。&/p&&p&&br&&/p&&p&然后这几年持续集成测试做下来之后,又有一点自己的理解。对于自动化测试,可能很多人都在搞,以至于大家耳熟能详的都是一些selenium、requests、jmeter、testng之类的自动化测试相关工具。但是,真正把自动化测试做好的,都离不开持续集成。&/p&&p&&br&&/p&&p&现在最流行的持续集成工具是jenkins,这个工具还是很有内涵的。可以说学持续集成就是学好怎样使用jenkins或类似工具。有的人会说,jenkins就是配一下插件完事儿,没啥技术含量。确实我们构建一个简单的持续集成流程是没多少技术含量的。但是,如果要从头搞出一套完整的,高效的,可靠的持续集成系统,就没那么简单。而其学习过程也比较长:&/p&&p&&br&&/p&&p&1.要对linux系统有了解,因为我们搭建了jenkins之后多半自己要当系统管理员。那么把jenkins部署在linux上是首选,所以要学linux。学习方法可以从看《鸟哥的linux私房菜》这本书开始。&/p&&p&2.然后对配置管理要有了解。持续集成系统要不断和配置管理系统打交道。换句话说就是你要学git。学习方法为看相关教程。对git的学习我后面也会写。&/p&&p&3.要对jenkins自身比较了解,各种配置、插件要会用。也就是学jenkins本身的使用。学习方法为看帮助文档。&/p&&p&4.要对自动化测试执行工具,及其的命令行模式有了解。也就是学习各个自动化测试工具。可以说,没有自动化测试的持续集成系统里出来的包是没用的。也就是说,&b&持续集成离不开自动化测试&/b&。&/p&&p&5.要对软件开发有所了解,jenkins本身有时候功能并不够用。此时需要想办法扩展。举个例子,之前公司有一个jenkins持续集成系统,每次jenkins升级,这个系统就要停机。那么为了解决这个问题,可以用web开发的方式,开发一个小系统,让两个jenkins master变成互相热备份的状态。这样,当一台jenkins master升级时,系统自动切换到另一台上。系统不用再停机了。此外,基于jenkins提供的http接口也可以做一些扩展。当然,开发jenkins插件也是一种扩展方式,我之前公司就开发了一个测试结果自动备份插件,把每次跑出来的结果备份到独立的存储空间里。总之,持续集成要搞得好,你最好学一点开发。&br&&/p&&p&&b&四、关于jenkins这个工具要了解的&br&&/b&&/p&&p&关于jenkins这个工具的学习,在具体点说一下。&/p&&p&&br&&/p&&p&&br&&/p&&figure&&img src=&https://pic3.zhimg.com/v2-220cd7cabdf4c918d66e874_b.jpg& data-caption=&& data-rawwidth=&762& data-rawheight=&391& class=&origin_image zh-lightbox-thumb& width=&762& data-original=&https://pic3.zhimg.com/v2-220cd7cabdf4c918d66e874_r.jpg&&&/figure&&p&&br&&/p&&p&首先,要理解jenkins的master-slave模型,master负责配置持续集成系统,以及调度slave,具体的业务由slave来做。理解这个分布式机制,我们就知道了,如果把要做的测试分成两半,一半交给一个slave,一半交给另一个slave,那么我们就实现了分布式测试。这里可以压缩很多测试时间。&/p&&p&&br&&/p&&p&然后,具体业务都在jenkins job里定义,这里的业务都是指流程,也就是一步一步往下走的。这也是为什么在持续集成之后,整个流程很明显地管道化了(一步一步)。我们要理解这个管道的概念。对以后使用jenkins2.0提供的pipeline功能很有帮助,虽然现在这个pipeline功能用的人还不多,但未来无疑是属于pipeline的。而不会一直像现在这样人肉去配置一个一个的jenkins job。以后你去找工作,面试官可能会问你,用过pipeline吗。&/p&&p&还有,jenkins的各种主要功能都来自于插件。你如果想要一个功能,就要找对应的插件。比如群里有网友问我怎样把测试结果报告展示在jenkins上。显然,首先你需要在你的测试执行工具里生成原始报告。比如testNG可以生成junit格式的xml报告,然后你在jenkins上选择对应的插件读取这个xml报告并转化成html格式展示在jenkins上。&/p&&p&但这些插件的功能可能不够完美,这时你需要自己扩展。比如前面说的测试结果报告插件很可能不能提供美观的报告。还记得jenkins的管道思想吗?这里就可以应用一下:&/p&&p&&br&&/p&&figure&&img src=&https://pic4.zhimg.com/v2-5efd89cba1b295ded43ba_b.jpg& data-caption=&& data-rawwidth=&810& data-rawheight=&264& class=&origin_image zh-lightbox-thumb& width=&810& data-original=&https://pic4.zhimg.com/v2-5efd89cba1b295ded43ba_r.jpg&&&/figure&&p&&br&&/p&&p&这样,我只要写一个小工具去读取原来测试执行器生成的原始报告以及读取一些其他我想要的数据,然后在小工具里去自己生成我想要的报告,最后输出。以python为例,python有很多数据可视化的库,随便找一个都可以作出非常漂亮的报告,可以说管理层想看的任何柱状图,饼图,流程图,散点图,3D图,没有做不到,只有想不到。一个比较好的应用就是自己搞一个美观又完善点的性能测试报告来代替jmeter那简陋的测试报告。关于测试工具的开发,我后面会再写文章来介绍,这里只提一个最简单的小工具的思路。其实做自动化测试的人,最好都掌握一定的开发技能,自己可以给自己开发一些工具,好用又方便。&/p&&p&&br&&/p&&p&关于jenkins这块,还有很多东西可讲,重点在于我们怎样用jenkins来实现自己想要的持续集成系统。这次就不展开了。&/p&&hr&&p&最后,如果你还没有做过持续集成,不妨亲自尝试一下,这是一个提高自动化测试程度的很好的开端。越是大公司,越是大项目,越是需要搞持续集成。持续集成系统也在不断演进,可以说这方面展开来,东西非常多。这也是大家一个很好的进阶方向。&/p&&p&&br&&/p&&p&首发于公众号:测试进阶(test_up)公众号上现在添加了文章目录,可以方便地找到历史文章了。&/p&&p&&/p&&p&&/p&&p&&/p&
这一篇讲一讲持续集成的基础。没有持续集成,做自动化是不完整的,为了减少人工介入和提高迭代速度,现在越来越多的公司引入了持续集成系统。如果你自动化测试入了,下一步就是搞一个持续集成系统,不要再手工在本地触发你的自动化测试脚本啦。 一、持续集…
&figure&&img src=&https://pic4.zhimg.com/v2-dfe5bbe3f_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&465& data-rawheight=&439& class=&origin_image zh-lightbox-thumb& width=&465& data-original=&https://pic4.zhimg.com/v2-dfe5bbe3f_r.jpg&&&/figure&&p&一般人,大约都是学这些玩意吧?&/p&&p&你说的对,已经要先有工具。但是工具是什么?&/p&&p&显然,你去跑步的时候,肯定喝能量饮料。鞋和衣服的佩戴也很重要啊。&/p&&p&这就是工具。&/p&&p&那么你学习的时候,是直接面对书本,还是面对一个说书人和讲解人,把知识传授给你呢?&/p&&p&大家都知道书本是通用的。那么就注定不会针对你,而配套,那该怎么办&/p&&figure&&img src=&https://pic2.zhimg.com/v2-f6c2188fb60bbd72dcfcda2ab36756cd_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&2936& data-rawheight=&2636& class=&origin_image zh-lightbox-thumb& width=&2936& data-original=&https://pic2.zhimg.com/v2-f6c2188fb60bbd72dcfcda2ab36756cd_r.jpg&&&/figure&&p&显然,这样的图,应该会让脉络清晰一下。&/p&&figure&&img src=&https://pic4.zhimg.com/v2-c895da789f4a9dee5673b2ffe47c3e37_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&690& data-rawheight=&677& class=&origin_image zh-lightbox-thumb& width=&690& data-original=&https://pic4.zhimg.com/v2-c895da789f4a9dee5673b2ffe47c3e37_r.jpg&&&/figure&&p&事实上,下图,会让你沉迷365天&/p&&figure&&img src=&https://pic4.zhimg.com/v2-ed5e7f4cb_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&675& data-rawheight=&675& class=&origin_image zh-lightbox-thumb& width=&675& data-original=&https://pic4.zhimg.com/v2-ed5e7f4cb_r.jpg&&&/figure&&p&为什么呢? 为什么没有人给你把cs的课程做的像这样浅显易懂呢?&/p&&p&这是值得思考的。&/p&&p&那么,要想知道山有多高。可以先看看这里。&/p&&p&&a href=&https://www.zhihu.com/question//answer/& class=&internal&&扶余城里小老二:计算机大一新生,压力大,天天都在学习,我该怎么办?&/a&&/p&&p&&br&&/p&&figure&&img src=&https://pic1.zhimg.com/v2-f07145abea3d661c5520c_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&720& data-rawheight=&434& class=&origin_image zh-lightbox-thumb& width=&720& data-original=&https://pic1.zhimg.com/v2-f07145abea3d661c5520c_r.jpg&&&/figure&&p&当然了,既然是初学者,先慢慢来。先学学excel 我觉得是对的。&/p&&figure&&img src=&https://pic2.zhimg.com/v2-a0ec1afb3f24f81745b1_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&600& data-rawheight=&337& class=&origin_image zh-lightbox-thumb& width=&600& data-original=&https://pic2.zhimg.com/v2-a0ec1afb3f24f81745b1_r.jpg&&&/figure&&p&人家小游戏都可以做。还有源码。&/p&&p&&a href=&https://www.zhihu.com/question/& class=&internal&&Excel 到底有多厉害?&/a&&/p&&hr&&p&那么进阶是什么呢? 肯定是power map 啦&/p&&figure&&img src=&https://pic4.zhimg.com/v2-976d6cff7d30a5db17f8c8b_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&900& data-rawheight=&500& class=&origin_image zh-lightbox-thumb& width=&900& data-original=&https://pic4.zhimg.com/v2-976d6cff7d30a5db17f8c8b_r.jpg&&&/figure&&p&&a href=&https://zhuanlan.zhihu.com/p/& class=&internal&&【EXCEL】利用Power Map完成地理数据可视化&/a&&/p&&p&要想在师兄弟里,出人头地,没有这些玩意,我们 根本无法撼动他们的地位啊。&/p&&p&你问我这东西有多厉害,我只能说,先做一些他们觉得表面化的东西,然后我们再夯实内功。&/p&&p&毕竟这个实力是由外至内的。&/p&&figure&&img src=&https://pic2.zhimg.com/v2-434fc25ace8fa1dea9dc4cf1_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&640& data-rawheight=&389& class=&origin_image zh-lightbox-thumb& width=&640& data-original=&https://pic2.zhimg.com/v2-434fc25ace8fa1dea9dc4cf1_r.jpg&&&/figure&&p&然后呢,就要开始,每个学校都学的matlab了。这玩意你不碰不行,原因是刚来cs,你还太小。&/p&&figure&&img src=&https://pic2.zhimg.com/v2-b93c752c308d9b68193f6d_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&576& data-rawheight=&513& class=&origin_image zh-lightbox-thumb& width=&576& data-original=&https://pic2.zhimg.com/v2-b93c752c308d9b68193f6d_r.jpg&&&/figure&&p&算法库,图形库,计算机图形学 2d,3d相关的东西,matlab都给你做好了。&/p&&figure&&img src=&https://pic2.zhimg.com/v2-9e5075bbef4ee_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&720& data-rawheight=&579& class=&origin_image zh-lightbox-thumb& width=&720& data-original=&https://pic2.zhimg.com/v2-9e5075bbef4ee_r.jpg&&&/figure&&p&还是那句话,我们先要做的是创意。给自己点自信。然后再专研那些逻辑性非常强的东西。&/p&&p&什么ai系列算法什么的。都有工具箱。&/p&&figure&&img src=&https://pic3.zhimg.com/v2-152ab5b6a9aa619ccf8d618d184fbc4e_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&668& data-rawheight=&601& class=&origin_image zh-lightbox-thumb& width=&668& data-original=&https://pic3.zhimg.com/v2-152ab5b6a9aa619ccf8d618d184fbc4e_r.jpg&&&/figure&&p&&a href=&https://www.zhihu.com/question/& class=&internal&&MATLAB 到底有多厉害?&/a&&/p&&p&&br&&/p&&figure&&img src=&https://pic4.zhimg.com/v2-ec251c4dbbe90086e0ebfb_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&600& data-rawheight=&450& class=&origin_image zh-lightbox-thumb& width=&600& data-original=&https://pic4.zhimg.com/v2-ec251c4dbbe90086e0ebfb_r.jpg&&&/figure&&hr&&p&当然了,既然刚上大学,就别搞那些太专业了。&/p&&p&大一,要求的是快乐。&/p&&figure&&img src=&https://pic3.zhimg.com/v2-c8dbe9fd86ef6e6bade2a_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&547& data-rawheight=&382& class=&origin_image zh-lightbox-thumb& width=&547& data-original=&https://pic3.zhimg.com/v2-c8dbe9fd86ef6e6bade2a_r.jpg&&&/figure&&p&这个是mugen格斗游戏引擎。上来就是高屋建瓴。也可以从基础做起。&/p&&p&当然,也可以做2dfm,ddbscs是其在国内的代表作&/p&&figure&&img src=&https://pic1.zhimg.com/v2-7edae380_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&640& data-rawheight=&480& class=&origin_image zh-lightbox-thumb& width=&640& data-original=&https://pic1.zhimg.com/v2-7edae380_r.jpg&&&/figure&&figure&&img src=&https://pic4.zhimg.com/v2-121dbdb7a39a05c90f2a09efb7f1a593_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&600& data-rawheight=&450& class=&origin_image zh-lightbox-thumb& width=&600& data-original=&https://pic4.zhimg.com/v2-121dbdb7a39a05c90f2a09efb7f1a593_r.jpg&&&/figure&&figure&&img src=&https://pic1.zhimg.com/v2-605b70defda66a46cce845b0_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&500& data-rawheight=&375& class=&origin_image zh-lightbox-thumb& width=&500& data-original=&https://pic1.zhimg.com/v2-605b70defda66a46cce845b0_r.jpg&&&/figure&&p&那看起来是成品,该怎么做呢?&/p&&figure&&img src=&https://pic4.zhimg.com/v2-2d9bd9dac6afec2e9bfe0d042f597acb_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1580& data-rawheight=&890& class=&origin_image zh-lightbox-thumb& width=&1580& data-original=&https://pic4.zhimg.com/v2-2d9bd9dac6afec2e9bfe0d042f597acb_r.jpg&&&/figure&&p&这个是表格编程,只需要知道哪个格子有什么用,就可以了。&/p&&p&当然了,还有openbor。。这个是横版过关的开源游戏引擎。&/p&&p&这个日后再说了。&/p&&p&点个赞吧,没事的时候,看看&/p&&p&有需求的留个言,不定时更新&/p&&p&赞越多,我更新的越勤快。&/p&&hr&&p&先谈谈三国演义&/p&&figure&&img src=&https://pic2.zhimg.com/v2-61babdc4f1be9e8375fc1_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1080& data-rawheight=&2629& class=&origin_image zh-lightbox-thumb& width=&1080& data-original=&https://pic2.zhimg.com/v2-61babdc4f1be9e8375fc1_r.jpg&&&/figure&&p&因为很多三国游戏都是这个脉络。&/p&&hr&&p&点个赞吧,0赞贴都堆满一仓库了。看着心里发慌啊。&/p&&figure&&img src=&https://pic2.zhimg.com/v2-ed578afce21e3d29184a6edf_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&500& data-rawheight=&500& class=&origin_image zh-lightbox-thumb& width=&500& data-original=&https://pic2.zhimg.com/v2-ed578afce21e3d29184a6edf_r.jpg&&&/figure&&p&本来不想更新了,但是看到大家的热情。还得更啊。&/p&&p&那么,插入一个体感摄像头的信息吧&/p&&figure&&img src=&https://pic1.zhimg.com/v2-aea3f7c70c218dac3870100_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1216& data-rawheight=&839& class=&origin_image zh-lightbox-thumb& width=&1216& data-original=&https://pic1.zhimg.com/v2-aea3f7c70c218dac3870100_r.jpg&&&/figure&&p&&a href=&//link.zhihu.com/?target=http%3A//blog.csdn.net/jiaojialulu/article/details/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&windows下libfreenect2的安装 - CSDN博客&i class=&icon-external&&&/i&&/a&&/p&&p&&br&&/p&&p&因为,用体感,是跟机械臂控制有关系。 体感已经是一个很有发展潜力的方向了。&/p&&p&kinectv4和v5都集成在ar眼镜里面了。&/p&&p&3d重建。混合现实。都是用了这些设备和原理。&/p&&figure&&img src=&https://pic3.zhimg.com/v2-debf4ad5f32cebe98ad92ae_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1030& data-rawheight=&796& class=&origin_image zh-lightbox-thumb& width=&1030& data-original=&https://pic3.zhimg.com/v2-debf4ad5f32cebe98ad92ae_r.jpg&&&/figure&&p&这个是3d 点云 与图片合成的 3d图像。&/p&&p&ue4和u3d,都有配套设备的编程。&/p&&p&&br&&/p&&p&很多人,用体感摄像头 做动作捕捉。&/p&&p&&a href=&//link.zhihu.com/?target=http%3A//www.bilibili.com/video/av354219/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&【YouTube】SFM的动作捕捉教程【高清7P】_数码_科技_bilibili_哔哩哔哩&i class=&icon-external&&&/i&&/a&&/p&&p&&br&&/p&&p&这个可以用来做虚拟直播间。你说有没有未来。&/p&&a class=&video-box& href=&//link.zhihu.com/?target=http%3A//v.youku.com/v_show/id_XMjgyMjE2MTcwNA%3D%3D.html%3Fspm%3Da2h0k..0%26from%3Ds1.8-1-1.2& target=&_blank& data-video-id=&077248& data-video-playable=&true& data-name=&Kinect+HoloLens动作捕捉融入混合现实技术& data-poster=&https://pic3.zhimg.com/80/v2-f35bd85a3acbba_b.jpg& data-lens-id=&&&
&img class=&thumbnail& src=&https://pic3.zhimg.com/80/v2-f35bd85a3acbba_b.jpg&&&span class=&content&&
&span class=&title&&Kinect+HoloLens动作捕捉融入混合现实技术&span class=&z-ico-extern-gray&&&/span&&span class=&z-ico-extern-blue&&&/span&&/span&
&span class=&url&&&span class=&z-ico-video&&&/span&http://v.youku.com/v_show/id_XMjgyMjE2MTcwNA==.html?spm=a2h0k..0&from=s1.8-1-1.2&/span&
&/a&&p&肥宅图像+骨骼 绑定 &/p&&p&美女图像+骨骼绑定(录各种动作)&/p&&p&然后通过ai训练之后,肥宅跳舞 直接 转换成 美女跳舞了。&/p&&p&真的就变成提线木偶了。&/p&&p&&br&&/p&&figure&&img src=&https://pic1.zhimg.com/v2-591d46f7e809c0f2289b0_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&483& data-rawheight=&324& class=&origin_image zh-lightbox-thumb& width=&483& data-original=&https://pic1.zhimg.com/v2-591d46f7e809c0f2289b0_r.jpg&&&/figure&&p&3d重建就是先扫描一个球和石膏&/p&&figure&&img src=&https://pic4.zhimg.com/v2-f5d8062bdcb54bfdc344ff80caad2803_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&580& data-rawheight=&378& class=&origin_image zh-lightbox-thumb& width=&580& data-original=&https://pic4.zhimg.com/v2-f5d8062bdcb54bfdc344ff80caad2803_r.jpg&&&/figure&&p&然后这个石膏就可以 进入3d编辑软件里面成为模型了。&/p&&figure&&img src=&https://pic3.zhimg.com/v2-40e1772dbba6ea4b6516dfc03c7fd54a_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&580& data-rawheight=&381& class=&origin_image zh-lightbox-thumb& width=&580& data-original=&https://pic3.zhimg.com/v2-40e1772dbba6ea4b6516dfc03c7fd54a_r.jpg&&&/figure&&p&某网友扫描的键盘。。。&/p&&p&以前大学生真的很难做什么,现在是什么都可以做。&/p&&p&因为 3d打印机诞生了。&/p&&hr&&p&体感摄像头,还有一个用途是 智能测距,&/p&&p&废纸桶居然,里面有电池。呵呵,因为,他就是一个wifi小车啊。&/p&&figure&&img src=&https://pic2.zhimg.com/v2-f444dda61bd_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&550& data-rawheight=&451& class=&origin_image zh-lightbox-thumb& width=&550& data-original=&https://pic2.zhimg.com/v2-f444dda61bd_r.jpg&&&/figure&&p&&br&&/p&&p&&a href=&//link.zhihu.com/?target=http%3A//v.youku.com/v_show/id_XNTE2MTI4MDUy.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Minoru Kurata设计了垃圾桶机器人&i class=&icon-external&&&/i&&/a&&/p&&p&&br&&/p&&figure&&img src=&https://pic4.zhimg.com/v2-efd9e002f0c70d2ab24ecb1e3effd1ab_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&640& data-rawheight=&640& class=&origin_image zh-lightbox-thumb& width=&640& data-original=&https://pic4.zhimg.com/v2-efd9e002f0c70d2ab24ecb1e3effd1ab_r.jpg&&&/figure&&figure&&img src=&https://pic1.zhimg.com/v2-6fec1a529c5deb2cdc1d7a0_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&580& data-rawheight=&434& class=&origin_image zh-lightbox-thumb& width=&580& data-original=&https://pic1.zhimg.com/v2-6fec1a529c5deb2cdc1d7a0_r.jpg&&&/figure&&figure&&img src=&https://pic1.zhimg.com/v2-6b4ed20fea04bc842eec20_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&580& data-rawheight=&434& class=&origin_image zh-lightbox-thumb& width=&580& data-original=&https://pic1.zhimg.com/v2-6b4ed20fea04bc842eec20_r.jpg&&&/figure&&figure&&img src=&https://pic2.zhimg.com/v2-4dfb13f1cc55cbb2fada5_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&3264& data-rawheight=&1840& class=&origin_image zh-lightbox-thumb& width=&3264& data-original=&https://pic2.zhimg.com/v2-4dfb13f1cc55cbb2fada5_r.jpg&&&/figure&&p&&br&&/p&&p&这么东西,你们能够绕开吗? 我觉得你们绕不开&/p&&p&然后呢。你们不满足嘛,还要继续走。一般大学实验室里面,也就这样了。&/p&&a class=&video-box& href=&//link.zhihu.com/?target=http%3A//v.youku.com/v_show/id_XMTY2MTM4MzY3Ng%3D%3D.html%3Fspm%3Da2h0j.8191423.module_basic_relation.5%7E5%212%7E5%7E5%%212%7E1%7E3%7EA& target=&_blank& data-video-id=&741120& data-video-playable=&true& data-name=&倒水_2代& data-poster=&https://pic1.zhimg.com/80/v2-886dabcaa3fd260b11a89ed03bbe23d4_b.jpg& data-lens-id=&&&
&img class=&thumbnail& src=&https://pic1.zhimg.com/80/v2-886dabcaa3fd260b11a89ed03bbe23d4_b.jpg&&&span class=&content&&
&span class=&title&&倒水_2代&span class=&z-ico-extern-gray&&&/span&&span class=&z-ico-extern-blue&&&/span&&/span&
&span class=&url&&&span class=&z-ico-video&&&/span&http://v.youku.com/v_show/id_XMTY2MTM4MzY3Ng==.html?spm=a2h0j.8191423.module_basic_relation.5~5!2~5~5!16~5!2~1~3~A&/span&
&/a&&p&然后呢?你要做3d打印机。那就绕不开滑台了。&/p&&a class=&video-box& href=&//link.zhihu.com/?target=http%3A//v.youku.com/v_show/id_XNTk5MTM3Mjcy.html%3Fspm%3Da2h0j.8191423.module_basic_relation.5%7E5%212%7E5%7E5%213%7E5%7E5%7EA& target=&_blank& data-video-id=&604160& data-video-playable=&true& data-name=&视频& data-poster=&https://pic1.zhimg.com/80/v2-1d99d80bb4_b.jpg& data-lens-id=&&&
&img class=&thumbnail& src=&https://pic1.zhimg.com/80/v2-1d99d80bb4_b.jpg&&&span class=&content&&
&span class=&title&&视频&span class=&z-ico-extern-gray&&&/span&&span class=&z-ico-extern-blue&&&/span&&/span&
&span class=&url&&&span class=&z-ico-video&&&/span&http://v.youku.com/v_show/id_XNTk5MTM3Mjcy.html?spm=a2h0j.8191423.module_basic_relation.5~5!2~5~5!3~5~5~A&/span&
&/a&&p&嗯,我知道,你不想去那里,没意思。&/p&&figure&&img src=&https://pic4.zhimg.com/v2-908cfe43deffd74ec6f9c43_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&720& data-rawheight=&720& class=&origin_image zh-lightbox-thumb& width=&720& data-original=&https://pic4.zhimg.com/v2-908cfe43deffd74ec6f9c43_r.jpg&&&/figure&&a class=&video-box& href=&//link.zhihu.com/?target=http%3A//v.youku.com/v_show/id_XNjIyNTY2NjU2.html%3Fspm%3Da2h0j.8191423.module_basic_relation.5%7E5%212%7E5%7E5%214%7E5%212%7E1%7E3%7EA& target=&_blank& data-video-id=&993984& data-video-playable=&true& data-name=&蜘蛛手机器人装盒机 高速机械手& data-poster=&https://pic2.zhimg.com/80/v2-e1cffda934b3e53b88fd_b.jpg& data-lens-id=&&&
&img class=&thumbnail& src=&https://pic2.zhimg.com/80/v2-e1cffda934b3e53b88fd_b.jpg&&&span class=&content&&
&span class=&title&&蜘蛛手机器人装盒机 高速机械手&span class=&z-ico-extern-gray&&&/span&&span class=&z-ico-extern-blue&&&/span&&/span&
&span class=&url&&&span class=&z-ico-video&&&/span&http://v.youku.com/v_show/id_XNjIyNTY2NjU2.html?spm=a2h0j.8191423.module_basic_relation.5~5!2~5~5!4~5!2~1~3~A&/span&
&/a&&p&你只是想,一个人静静地打乒乓球&/p&&a class=&video-box& href=&//link.zhihu.com/?target=http%3A//www.iqiyi.com/w_19rryaayp9.html& target=&_blank& data-video-id=&240832& data-video-playable=&false& data-name=&一个人打乒乓球 男子自制超神乒乓球机械臂& data-poster=&https://pic4.zhimg.com/80/v2-68c6a697f7e83b3073ff_b.jpg& data-lens-id=&&&
&img class=&thumbnail& src=&https://pic4.zhimg.com/80/v2-68c6a697f7e83b3073ff_b.jpg&&&span class=&content&&
&span class=&title&&一个人打乒乓球 男子自制超神乒乓球机械臂&span class=&z-ico-extern-gray&&&/span&&span class=&z-ico-extern-blue&&&/span&&/span&
&span class=&url&&&span class=&z-ico-video&&&/span&http://www.iqiyi.com/w_19rryaayp9.html&/span&
&/a&&p&还有我不知道的吗?&/p&&p&嗯,我知道,你看了这个,就不想打乒乓球了。&/p&&a class=&video-box& href=&//link.zhihu.com/?target=http%3A//www.iqiyi.com/w_19rqzowjcp.html& target=&_blank& data-video-id=&908096& data-video-playable=&false& data-name=&德国KUKA公司广告短片《机器手臂与世界冠军的乒乓对决& data-poster=&https://pic4.zhimg.com/80/v2-6dbef2c5fb9d7ecbcbbb1f_b.jpg& data-lens-id=&&&
&img class=&thumbnail& src=&https://pic4.zhimg.com/80/v2-6dbef2c5fb9d7ecbcbbb1f_b.jpg&&&span class=&content&&
&span class=&title&&德国KUKA公司广告短片《机器手臂与世界冠军的乒乓对决&span class=&z-ico-extern-gray&&&/span&&span class=&z-ico-extern-blue&&&/span&&/span&
&span class=&url&&&span class=&z-ico-video&&&/span&http://www.iqiyi.com/w_19rqzowjcp.html&/span&
&/a&&figure&&img src=&https://pic4.zhimg.com/v2-ffb6191fdf_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&600& data-rawheight=&453& class=&origin_image zh-lightbox-thumb& width=&600& data-original=&https://pic4.zhimg.com/v2-ffb6191fdf_r.jpg&&&/figure&&p&当然了,有些人直接为了妇女生活质量的提高。去造了这些东西&/p&&figure&&img src=&https://pic4.zhimg.com/v2-6a9deb918f82cf037e1f_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&725& data-rawheight=&498& class=&origin_image zh-lightbox-thumb& width=&725& data-original=&https://pic4.zhimg.com/v2-6a9deb918f82cf037e1f_r.jpg&&&/figure&&p&而且还不止一个同学&/p&&figure&&img src=&https://pic1.zhimg.com/v2-7caef44a3dc4fae564dbbc_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&548& data-rawheight=&381& class=&origin_image zh-lightbox-thumb& width=&548& data-original=&https://pic1.zhimg.com/v2-7caef44a3dc4fae564dbbc_r.jpg&&&/figure&&p&我想说。这东西 还有待提高。原因是,由于频率相同很容易就适应了,效果就淡化了。&/p&&p&必须得上伺服电机。然后配合 vr设备,以及影视或者音乐。可以改变缩进,推进的距离。&/p&&p&还应该有起伏。&/p&&hr&&figure&&img src=&https://pic1.zhimg.com/v2-e5ce478aafea4428_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&412& data-rawheight=&300& class=&content_image& width=&412&&&/figure&&p&&br&&/p&&p&显然,逛一逛,开了眼界之后,我们还是考虑思路问题。&/p&&figure&&img src=&https://pic2.zhimg.com/v2-4d41ba0e67f0a7fa27aef6a_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&977& data-rawheight=&686& class=&origin_image zh-lightbox-thumb& width=&977& data-original=&https://pic2.zhimg.com/v2-4d41ba0e67f0a7fa27aef6a_r.jpg&&&/figure&&p&if else 到底是什么,思路是怎么走的。&/p&&figure&&img src=&https://pic1.zhimg.com/v2-a6b31fdcade5ac_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1114& data-rawheight=&723& class=&origin_image zh-lightbox-thumb& width=&1114& data-original=&https://pic1.zhimg.com/v2-a6b31fdcade5ac_r.jpg&&&/figure&&p&我个人觉得思路,跟人走的路是一样的。&/p&&p&如果不能走,那肯定不是路。&/p&&p&&br&&/p&&figure&&img src=&https://pic2.zhimg.com/v2-17fedc808e1fc8e04a1b55_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&720& data-rawheight=&307& class=&origin_image zh-lightbox-thumb& width=&720& data-original=&https://pic2.zhimg.com/v2-17fedc808e1fc8e04a1b55_r.jpg&&&/figure&&p&上面这个gif动图。光是这样,一个箭头,来回走就行吗?&/p&&p&是不是太没有设计感了?&/p&&p&&br&&/p&&p& update&/p&&figure&&img src=&https://pic1.zhimg.com/v2-1c0f78c908f3f4e8b0503ed72efb71b8_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&289& data-rawheight=&365& class=&content_image& width=&289&&&/figure&&p&怎么样有点进展了把&/p&&p&&br&&/p&&hr&&p&&br&&/p&&p&&br&&/p&&figure&&img src=&https://pic4.zhimg.com/v2-f50ad18ead25cab_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&439& data-rawheight=&232& class=&origin_image zh-lightbox-thumb& width=&439& data-original=&https://pic4.zhimg.com/v2-f50ad18ead25cab_r.jpg&&&/figure&&figure&&img src=&https://pic4.zhimg.com/v2-baafd56aba804ac5b55dbcb_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&485& data-rawheight=&683& class=&origin_image zh-lightbox-thumb& width=&485& data-original=&https://pic4.zhimg.com/v2-baafd56aba804ac5b55dbcb_r.jpg&&&/figure&&p&&br&&/p&&p&CS世界这么美,我们该往和处走?&/p&&figure&&img src=&https://pic2.zhimg.com/v2-d1abaef4f331fca34a5d_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&640& data-rawheight=&480& class=&origin_image zh-lightbox-thumb& width=&640& data-original=&https://pic2.zhimg.com/v2-d1abaef4f331fca34a5d_r.jpg&&&/figure&&p&&a href=&https://www.zhihu.com/question//answer/& class=&internal&&扶余城里小老二:能否用视频展示下,你平常是如何编程的?&/a&&/p&&p&这个谁都逃不掉。就算不看我的,看看其他前辈的也挺好。&/p&
一般人,大约都是学这些玩意吧?你说的对,已经要先有工具。但是工具是什么?显然,你去跑步的时候,肯定喝能量饮料。鞋和衣服的佩戴也很重要啊。这就是工具。那么你学习的时候,是直接面对书本,还是面对一个说书人和讲解人,把知识传授给你呢?大家都知道…
&figure&&img src=&https://pic1.zhimg.com/v2-f98cd647ddfc69caa6ccf7e02d3bc534_b.jpg& data-rawwidth=&510& data-rawheight=&253& class=&origin_image zh-lightbox-thumb& width=&510& data-original=&https://pic1.zhimg.com/v2-f98cd647ddfc69caa6ccf7e02d3bc534_r.jpg&&&/figure&&p&在 GitHub 上面看到了一个 Star 数目接近 7 万的项目,分享和罗列了各种学习资料和资源,主要是 IT 相关。从软件到硬件,从免费书籍到开发工具,从教程到源代码,它上面几乎是涵盖了所有你想学习的东西,简直是应有尽有。&/p&&p&正如它的名字 awesome 一样,绝对 awesome,用中文说,就是一个字,赞!&/p&&p&本着独乐乐不如众乐乐的精神,这里分享给大家,共同学习。&/p&&p&这里先带大家预览一下它的内容。&/p&&p&&br&&/p&&h2&Contents&/h2&&ul&&li&&a href=&http://link.zhihu.com/?target=https%3A//github.com/sindresorhus/awesome%23platforms& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Platforms&/a&&/li&&li&&a href=&http://link.zhihu.com/?target=https%3A//github.com/sindresorhus/awesome%23programming-languages& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Programming Languages&/a&&/li&&li&&a href=&http://link.zhihu.com/?target=https%3A//github.com/sindresorhus/awesome%23front-end-development& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Front-End Development&/a&&/li&&li&&a href=&http://link.zhihu.com/?target=https%3A//github.com/sindresorhus/awesome%23back-end-development& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Back-End Development&/a&&/li&&li&&a href=&http://link.zhihu.com/?target=https%3A//github.com/sindresorhus/awesome%23computer-science& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Computer Science&/a&&/li&&li&&a href=&http://link.zhihu.com/?target=https%3A//github.com/sindresorhus/awesome%23big-data& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Big Data&/a&&/li&&li&&a href=&http://link.zhihu.com/?target=https%3A//github.com/sindresorhus/awesome%23theory& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Theory&/a&&/li&&li&&a href=&http://link.zhihu.com/?target=https%3A//github.com/sindresorhus/awesome%23books& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Books&/a&&/li&&li&&a href=&http://link.zhihu.com/?target=https%3A//github.com/sindresorhus/awesome%23editors& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Editors&/a&&/li&&li&&a href=&http://link.zhihu.com/?target=https%3A//github.com/sindresorhus/awesome%23gaming& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Gaming&/a&&/li&&li&&a href=&http://link.zhihu.com/?target=https%3A//github.com/sindresorhus/awesome%23development-environment& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Development Environment&/a&&/li&&li&&a href=&http://link.zhihu.com/?target=https%3A//github.com/sindresorhus/awesome%23entertainment& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Entertainment&/a&&/li&&li&&a href=&http://link.zhihu.com/?target=https%3A//github.com/sindresorhus/awesome%23databases& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Databases&/a&&/li&&li&&a href=&http://link.zhihu.com/?target=https%3A//github.com/sindresorhus/awesome%23media& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Media&/a&&/li&&li&&a href=&http://link.zhihu.com/?target=https%3A//github.com/sindresorhus/awesome%23learn& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Learn&/a&&/li&&li&&a href=&http://link.zhihu.com/?target=https%3A//github.com/sindresorhus/awesome%23security& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Security&/a&&/li&&li&&a href=&http://link.zhihu.com/?target=https%3A//github.com/sindresorhus/awesome%23content-management-systems& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Content Management Systems&/a&&/li&&li&&a href=&http://link.zhihu.com/?target=https%3A//github.com/sindresorhus/awesome%23hardware& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Hardware&/a&&/li&&li&&a href=&http://link.zhihu.com/?target=https%3A//github.com/sindresorhus/awesome%23business& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Business&/a&&/li&&li&&a href=&http://link.zhihu.com/?target=https%3A//github.com/sindresorhus/awesome%23work& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Work&/a&&/li&&li&&a href=&http://link.zhihu.com/?target=https%3A//github.com/sindresorhus/awesome%23networking& class=& wrap external& target=&_blan}

我要回帖

更多关于 vs2017 nodejs 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信