(转)如何提高UI自动化的质量(价值)

原文链接:https://www.jianshu.com/p/76fb2dd8b4b0

背景

      项目是基于Ruby on Rails开发的web程序,应该说项目中的测试实践是很好的,具有高覆盖率的单元测试以及比较合理的集成测试。存在的问题是,所有的单元测试和集成测试都是针对后端代码的,前端的JavaSript代码没有单元测试(这个是有历史原因的,暂时没法改变)。这也就意味着针对前端UI的修改是没有底层的单元测试来保障的,只能依靠高层级的UI自动化测试和手工测试来保障。

      我们最近刚刚完成了一个story,是纯前端的开发工作,结果在上线后发现我们在修改页面模板文件时,忘记了其他地方也在使用同样的模板文件,导致了部分页面样式错乱,甚至无法访问。这个bug在现有的UI自动化测试和手工测试中都被遗漏了,直接发布到了产品环境上,后来通过线上日志才被发现。不得已我们只好把版本先回退,修复bug后再重新上线,release的时间推迟了一周,可以说整个团队为此付出了严重的代价。

痛点

      作为团队的QA,出现这样的问题自然让我很不好受,颜面无光。。。抛开没有做story业务分析,手工测试场景遗漏等问题,聚焦在现有的UI自动化测试上,以下是我感知到的一些痛点:

UI自动化测试的稳定性不高 - UI自动化测试是用ruby版本的selenium实现的,存在着众所周知的问题,例如不够稳定,经常由于页面加载超时,UI交互复杂等问题导致测试失败,使得自动化测试结果的有效性不高,失去了它本来应该具有的价值。

测试场景覆盖不够全面 - 当然,根据测试金字塔的理念,上层的UI自动化测试应该是小规模的,只覆盖基本功能:

(转)如何提高UI自动化的质量(价值)_第1张图片

      但是具体到这个项目中,由于前端代码的底层测试缺失,所以不得不依靠高层级的UI自动化测试来覆盖更多的场景,   最起码要能完成基本的回归测试,否则手工测试的压力太大。这就回到了第一个问题,正是由于UI自动化测试的稳定性不高,所以我只实现了很小一部分功能,以免后续维护的成本太高,而我们遗漏的bug恰恰没有包含在自动化测试的场景中。

问题分析

      所以,我们的聚焦点集中在了如何提高UI自动化测试的质量上,经过分析,主要的问题有:

页面加载时间超时

在用webdriver的方法访问页面时,经常出现加载超时的问题。页面的DOM结构已经渲染完成了,但是在访问某些外部网站时长时间没有响应,导致测试脚本一直卡着无法继续进行,最后报超时错误。

页面交互action太多

UI自动化测试的一个缺点就是所有的执行动作都要通过页面的action来完成,例如文本框输入,点击按钮,而且这些动作的执行结果存在太多的变数,导致最后写出来的测试脚本太过脆弱,很容易失败。

解决问题

使用异常捕获机制来处理超时等异常情况

      针对页面超时的问题,由于页面的DOM结构已经渲染完成了,所以其实可以继续执行后续的用例。但是如果与外部网站的请求没有全部完成,selenium会认为页面加载没有完成,就一直卡在访问页面的get方法上。我的做法是设定一个页面加载的超时时间:

dr.manage.timeouts.page_load = 30

      超过30秒就认为页面加载超时(经过测试,30秒的时间已经足够把页面的DOM结构渲染完成了),然后访问页面时捕获超时的异常:

begin

   page.open_page

rescue Selenium::WebDriver::Error::TimeOutError

   puts "ERROR:page load timeout!!"

end

      这样如果加载超过30秒,会抛出异常后继续向下执行。不致于因为访问某些外部网站请求过慢,而卡在页面加载的步骤,导致整个测试用例失败。同样的策略也可以应用在某些复杂或者不确定的执行结果上,捕获可能出现的异常,提高测试的健壮性,避免非产品原因导致的测试用例失败。

减少UI测试,增加API级别的测试

这个观点听上去多少有点荒唐,提高UI测试质量的方法是减少UI测试。。。。但事实就是这样,UI测试是自动化成本最高,最不稳定的测试,能够在低层级完成的测试,例如API层的测试,就不要放到UI层去完成,这样会使测试更加稳定和健壮。很多页面action,例如提交表单,点击按钮等,实际都是向后台发送了一条请求,如果测试的是功能,那么完全可以用API来完成这些测试。重点还是在于我们究竟想测什么,是否必须要从UI层去完成这些测试?这就是测试结构的设计问题了,这里不展开讨论。

在这个项目中,我把一些可以在API层完成的测试从UI测试用例中分离出来,用ruby的Faraday库(当然也可以用其他的,例如JS的SuperTest)调用相应的API并对返回数据做校验,这些测试相比于UI测试更加稳定,运行速度更快,整个测试的稳定性便得到了提升。

将页面交互的action与静态页面内容分开测试

这个方法的思路和上一个类似,尽量减少通过页面加载和交互来完成的测试。如果测试内容中不包含动态的页面交互步骤,例如只是想测试页面能否正常打开,某一部分的内容能否正常显示等,可以从页面的DOM结构中通过校验某些元素来完成测试。

举个例子,如果想测试百度首页,可以不用从selenium webdriver中去加载这个页面,直接用ruby的Faraday或者JS的SuperTest去访问"http://www.baidu.com"这个URL。这样拿到的将是一段html的文本,然后再解析这段html文本(例如用ruby的Nokogirl库),获取对应的内容来做校验。例如返回码是200,的内容是“百度一下,你就知道”,那么可以认为首页能够正常打开。<img>中的src属性是一个正确的图片文件,可以认为百度的logo能够正常显示。</p> <p>这里会产生疑问,如果我就是想测试界面怎么办?这就回到了刚才那个问题,我们究竟想测什么?如果只是想测功能,那么我们就尽量减少对界面的依赖。如果只是想测界面,那么也有其他的办法来完成,例如WebdriverCSS或者PhantomCSS等界面对比的测试工具。当然,有些测试步骤是必须要依赖页面交互的,例如点击某个按钮打开一个新的对话框或者跳转到其他页面,这些测试就只能通过webdriver来完成了。</p> <p>总结</p> <p>      通过实际的尝试,我明显感觉到优化后的自动化测试相比于原来有了更稳定的表现,运行速度变快,非产品原因导致的用例失败次数变少。而且自动化测试更稳定后,我有信心去实现更多的自动化测试,扩大覆盖的场景。我的一些感受和收获是:</p> <p>  1.UI自动化测试的编码实现不难,难的是如何做整体的测试结构设计。在UI测试中覆盖的场景太少达不到测试的目的,场景太多又会成为团队的负担,带来高昂的维护成本,需要和UT/API等测试综合考虑,互相弥补。</p> <p>  2.UI自动化测试是把双刃剑,它应该是QA最后考虑的自动化测试方法。只有当其他层级的测试无法达到目的,或者希望测试的内容必须要通过UI完成时,再去考虑用它。低层级能完成的测试不要放在高层级去完成,在静态DOM结构中能完成的测试不要通过webdriver加载页面去完成。<br><br>  </p> </div> </div> </div> </div> </div> <!--PC和WAP自适应版--> <div id="SOHUCS" sid="1304111965160902656"></div> <script type="text/javascript" src="/views/front/js/chanyan.js"></script> <!-- 文章页-底部 动态广告位 --> <div class="youdao-fixed-ad" id="detail_ad_bottom"></div> </div> <div class="col-md-3"> <div class="row" id="ad"> <!-- 文章页-右侧1 动态广告位 --> <div id="right-1" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad"> <div class="youdao-fixed-ad" id="detail_ad_1"> </div> </div> <!-- 文章页-右侧2 动态广告位 --> <div id="right-2" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad"> <div class="youdao-fixed-ad" id="detail_ad_2"></div> </div> <!-- 文章页-右侧3 动态广告位 --> <div id="right-3" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad"> <div class="youdao-fixed-ad" id="detail_ad_3"></div> </div> </div> </div> </div> </div> </div> <div class="container"> <h4 class="pt20 mb15 mt0 border-top">你可能感兴趣的:(自动化测试)</h4> <div id="paradigm-article-related"> <div class="recommend-post mb30"> <ul class="widget-links"> <li><a href="/article/1950104854147952640.htm" title="MutationObserver接口性能分析与优化:DOM监控利器背后的性能陷阱与内存危机" target="_blank">MutationObserver接口性能分析与优化:DOM监控利器背后的性能陷阱与内存危机</a> <span class="text-muted">coding随想</span> <a class="tag" taget="_blank" href="/search/JavaScript/1.htm">JavaScript</a><a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a> <div>一、DOM的“哨兵”:MutationObserver的崛起在Web开发的江湖中,MutationObserver是一个低调却强大的角色。它像一位忠诚的哨兵,时刻监控着DOM树的风吹草动——属性变化、子节点增删、文本内容更新……开发者们用它来实现动态内容监听、表单验证、甚至自动化测试。然而,这位“哨兵”的背后,却隐藏着不容忽视的性能陷阱和内存危机。1.1MutationObserver的诞生背景在</div> </li> <li><a href="/article/1949897434448588800.htm" title="Selenium自动化测试如何结合代理IP解决IP限制?" target="_blank">Selenium自动化测试如何结合代理IP解决IP限制?</a> <span class="text-muted">爱睡觉的圈圈</span> <a class="tag" taget="_blank" href="/search/%E4%BB%A3%E7%90%86%E6%9C%8D%E5%8A%A1/1.htm">代理服务</a><a class="tag" taget="_blank" href="/search/selenium/1.htm">selenium</a><a class="tag" taget="_blank" href="/search/tcp%2Fip/1.htm">tcp/ip</a><a class="tag" taget="_blank" href="/search/%E6%B5%8B%E8%AF%95%E5%B7%A5%E5%85%B7/1.htm">测试工具</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a> <div>好的,作为一名熟悉IP代理产品和开发的资深程序员,很高兴与你分享如何在Selenium自动化测试中结合代理IP来解决IP限制的问题。IP限制是自动化测试(尤其是Web抓取或大规模UI测试)中常见的痛点。目标网站可能会因为检测到来自同一IP的大量快速请求而暂时或永久封禁该IP。使用代理IP可以有效地解决这个问题。下面我将详细介绍几种在Selenium中设置代理IP的方法,并提供代码示例和最佳实践。S</div> </li> <li><a href="/article/1949875869828837376.htm" title="LabVIEW汽车底盘系统测试" target="_blank">LabVIEW汽车底盘系统测试</a> <span class="text-muted"></span> <div>在汽车研发制造流程里,底盘系统的性能与可靠性测试意义重大。其关乎车辆的操控稳定性、行驶安全性及乘坐舒适性。过往实车测试不仅成本高昂,还存在安全风险,且受天气、路况等外界因素制约。故而,搭建高精度、可模拟多样工况的底盘系统测试台架迫在眉睫,借助自动化测试技术,提升测试效率与精准度,为底盘系统的优化升级提供数据支撑。硬件选型数据采集设备选用一款具备高采样率、多通道同步采集功能的数据采集模块。高采样率确</div> </li> <li><a href="/article/1949757350831255552.htm" title="程序代码篇---python获取http界面上按钮或者数据输入" target="_blank">程序代码篇---python获取http界面上按钮或者数据输入</a> <span class="text-muted">Atticus-Orion</span> <a class="tag" taget="_blank" href="/search/%E7%A8%8B%E5%BA%8F%E4%BB%A3%E7%A0%81%E7%AF%87/1.htm">程序代码篇</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/http/1.htm">http</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a> <div>在Python中获取HTTP界面上的按钮点击或数据输入,主要有两种场景:作为客户端:模拟用户在网页上输入数据、点击按钮(比如爬虫自动提交表单)。作为服务端:搭建一个网页服务,接收用户在浏览器中输入的数据和按钮点击(比如自己写一个简单的Web应用)。下面分别用通俗易懂的方式讲解这两种场景的实现方法和代码。一、作为客户端:模拟用户操作网页(自动输入和点击)这种场景常用于自动化测试或数据爬取,需要模拟用</div> </li> <li><a href="/article/1949727589832650752.htm" title="软件测试功能测试+自动化测试面试题(含答案)" target="_blank">软件测试功能测试+自动化测试面试题(含答案)</a> <span class="text-muted">汽水拧盖师</span> <a class="tag" taget="_blank" href="/search/%E5%8A%9F%E8%83%BD%E6%B5%8B%E8%AF%95/1.htm">功能测试</a><a class="tag" taget="_blank" href="/search/%E8%81%8C%E5%9C%BA%E5%92%8C%E5%8F%91%E5%B1%95/1.htm">职场和发展</a><a class="tag" taget="_blank" href="/search/%E9%9D%A2%E8%AF%95/1.htm">面试</a> <div>测试理论1测试策略相似问法:测试包括哪些?测试要涵盖哪些方面?功能:各个功能是否完善性能:确定系统的性能级别和承受压力的能力(负载测试、并发测试、峰值测试、稳定性测试...)安全性兼容性可靠性易用性安全卸载UI2.用例要素是什么相似问法:用例里面包含什么内容?答:用例编号、模块名称、功能点、用例标题、前置条件、测试步骤、期望结果、优先级、实际结果、备注3.为什么写用例1、理清思路,避免漏测和重复测</div> </li> <li><a href="/article/1949720906829983744.htm" title="【Selenium自动化测试】鼠标与键盘操作" target="_blank">【Selenium自动化测试】鼠标与键盘操作</a> <span class="text-muted">牛油菠蘿包</span> <a class="tag" taget="_blank" href="/search/Selenium%E6%95%99%E7%A8%8B/1.htm">Selenium教程</a><a class="tag" taget="_blank" href="/search/%E8%87%AA%E5%8A%A8%E5%8C%96%E6%B5%8B%E8%AF%95/1.htm">自动化测试</a><a class="tag" taget="_blank" href="/search/selenium/1.htm">selenium</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E8%87%AA%E5%8A%A8%E5%8C%96/1.htm">自动化</a> <div>在WebDriver中,与鼠标操作相关的方法都封装在ActionChains类中,与键盘操作相关的方法都封装在Keys类中。下面介绍下这两个类中的常用方法。鼠标操作ActionChains类鼠标操作常用方法:context_click():右击double_click():双击drag_and_drop():拖动move_to_element():鼠标悬停perform():执行ActionCha</div> </li> <li><a href="/article/1949500708332040192.htm" title="app自动化测试(Android)" target="_blank">app自动化测试(Android)</a> <span class="text-muted">霍格沃兹测试开发学社</span> <div>原文链接客户端的页面通过XML来实现UI的布局,页面的UI布局作为一个树形结构,而树叶被定义为节点。这里的节点也就对应了要定位的元素,节点的上级节点,定义了元素的布局结构。在XML布局中可以使用XPath进行节点的定位。App的布局结构image.png从上面这张图中可以看到最左侧是应用的页面的展示,中间部分展示了这个页面的树形结构的XML代码。其中包含的内容为:节点node节点属性:包括clic</div> </li> <li><a href="/article/1949456255072399360.htm" title="【Python基础】yaml使用篇" target="_blank">【Python基础】yaml使用篇</a> <span class="text-muted">海上飞猪</span> <a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/yaml/1.htm">yaml</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/windows/1.htm">windows</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a> <div>python+yaml使用Python中yaml文件的读写(使用PyYAML库)。最近在搭建自动化测试项目过程中经常遇到yaml文件的读写,在准备测试数据过程中,也经常需要将数据临时存储在yaml文件中,正所谓好记性不如烂笔头,为了方便后续使用,决定记下笔记。一,YAML简介YAML,YetAnotherMarkupLanguage的简写,通常用来编写项目配置,也可用于数据存储,相比conf等配置</div> </li> <li><a href="/article/1949443517315084288.htm" title="CANoe 使用详解全攻略" target="_blank">CANoe 使用详解全攻略</a> <span class="text-muted">承接电子控制项目开发</span> <a class="tag" taget="_blank" href="/search/%E7%BD%91%E7%BB%9C/1.htm">网络</a><a class="tag" taget="_blank" href="/search/canoe/1.htm">canoe</a> <div>(注:根据推测,“canoepn”可能为“CANoe”的拼写错误,CANoe是Vector公司开发的汽车总线开发、仿真、测试工具,广泛用于汽车电子领域。以下是针对CANoe的详细使用指南。)一、CANoe简介应用场景汽车总线(CAN、LIN、FlexRay、Ethernet等)仿真与测试ECU(电子控制单元)通信分析自动化测试脚本开发诊断(UDS、KWP2000)与网络管理核心功能仿真:模拟ECU</div> </li> <li><a href="/article/1949427885429288960.htm" title="什么是自动化测试?" target="_blank">什么是自动化测试?</a> <span class="text-muted">测试界清流</span> <a class="tag" taget="_blank" href="/search/%E8%87%AA%E5%8A%A8%E5%8C%96%E6%B5%8B%E8%AF%95/1.htm">自动化测试</a> <div>自动化定义:Python接口自动化测试零基础入门到精通(2025最新版)自动化测试,是由人对软件的行为转化为机器执行测试行为的一种实践,对于常见的GUI自动化测试来说讲,就是有自动化测试工具模拟之前需要人工软件界面上的各种操作;自动化本质:自动化的本质是先写一段代码,然后测试另一段代码,所以实现自动化测试用例本身属于开发工作,需要投入大量的时间和精力,并且已经开发完的成的项目还要随着迭代不断的更新</div> </li> <li><a href="/article/1949422214969356288.htm" title="UI自动化概念+Web自动化测试框架" target="_blank">UI自动化概念+Web自动化测试框架</a> <span class="text-muted">自动化测试薰儿</span> <a class="tag" taget="_blank" href="/search/%E8%BD%AF%E4%BB%B6%E6%B5%8B%E8%AF%95%E9%9D%A2%E8%AF%95/1.htm">软件测试面试</a><a class="tag" taget="_blank" href="/search/%E9%9D%A2%E8%AF%95/1.htm">面试</a><a class="tag" taget="_blank" href="/search/%E8%BD%AF%E4%BB%B6%E6%B5%8B%E8%AF%95/1.htm">软件测试</a><a class="tag" taget="_blank" href="/search/ui/1.htm">ui</a><a class="tag" taget="_blank" href="/search/%E8%87%AA%E5%8A%A8%E5%8C%96/1.htm">自动化</a><a class="tag" taget="_blank" href="/search/%E8%BD%AF%E4%BB%B6%E6%B5%8B%E8%AF%95/1.htm">软件测试</a> <div>1.UI自动化测试概念:我们先明确什么是UIUI,即(UserInterface简称UI用户界面)是系统和用户之间进行交互和信息交换的媒介UI自动化测试:Web自动化测试和移动自动化测试都属于UI自动化测试,UI自动化测试就是借助自动化工具对程序UI层进行自动化的测试2.为什么对UI采用自动化测试?从不同的阶段或层次来说,自动化测试可以分为单元测试、接口测试、UI测试。如果一个产品从没有做单元测试</div> </li> <li><a href="/article/1949419065583923200.htm" title="自动化测试概念和时机" target="_blank">自动化测试概念和时机</a> <span class="text-muted">测试界清流</span> <a class="tag" taget="_blank" href="/search/%E8%87%AA%E5%8A%A8%E5%8C%96%E6%B5%8B%E8%AF%95/1.htm">自动化测试</a> <div>Python接口自动化测试零基础入门到精通(2025最新版)读者提问:什么是自动化测试,自动化测试的动机和时机是什么?阿常回答:一、自动化测试的概念自动化测试的本质是先写一段代码,然后去测试另一段代码。所以实现自动化测试用例本身属于开发工作,需要投入大量的时间和精力,并且已经开发完成的用例还必须随着被测对象的改变而不断更新,你还需要为此付出维护测试用例的成本。二、自动化测试的动机1、自动化测试可以</div> </li> <li><a href="/article/1949342878102777856.htm" title="【分享】提到接口测试,千万要把自动化测试和性能测试区分开" target="_blank">【分享】提到接口测试,千万要把自动化测试和性能测试区分开</a> <span class="text-muted">Kit2023</span> <div>今天要说的是接口的自动化测试和性能测试,很多刚接触这块的同学,因为这两者在处理脚本的方式上差不多,会把他们混为一谈,接下来说一些我理解的区别~相同因为接口的自动化测试和性能测试,在脚本的处理方式上很相似,如果使用一些接口测试工具如Eolinker、JMeter,甚至在特定情况下只需要做一些小改动模拟发送请求,就可以很轻松把自动化测试脚本转为性能测试脚本。区别1、测试角度不同自动化测试是基于功能测试</div> </li> <li><a href="/article/1949330676260073472.htm" title="别再手忙脚乱测 APP 啦!自动化测试直接 “逆天改命”" target="_blank">别再手忙脚乱测 APP 啦!自动化测试直接 “逆天改命”</a> <span class="text-muted"></span> <div>为什么测试需要自动化:技术视角下的必要性解析在数字化产品快速迭代的今天,购物APP、手机银行等应用的高频更新与稳定运行形成鲜明对比。你有没有好奇过,为什么这些APP能在频繁更新的同时,还能保持稳定的使用体验?这种"高频迭代却低故障"的现象背后,自动化测试体系扮演着关键角色。本文将从技术维度出发,结合生活场景,系统阐述测试自动化的核心价值与实施必要性。一、效能提升:解决测试效率与精度的核心矛盾(一)</div> </li> <li><a href="/article/1949268394461163520.htm" title="Selenium自动化测试入门:从零到精通" target="_blank">Selenium自动化测试入门:从零到精通</a> <span class="text-muted"></span> <div>文章目录一、前言1.浏览器驱动下载2.配置二、seleium使用教学1.基础框架2.常用操控浏览器的方法3.定位元素八种方法及其优缺点4.元素定位的隐性等待一、前言1.浏览器驱动下载chromedriver下载地址:https://googlechromelabs.github.io/chrome-for-testing/#stable谷歌浏览器网址栏输入:chrome://version查看你的</div> </li> <li><a href="/article/1949248844109770752.htm" title="Selenium 攻略:从元素操作到 WebDriver 实战" target="_blank">Selenium 攻略:从元素操作到 WebDriver 实战</a> <span class="text-muted">二向箔reverse</span> <a class="tag" taget="_blank" href="/search/selenium/1.htm">selenium</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E6%B5%8B%E8%AF%95%E5%B7%A5%E5%85%B7/1.htm">测试工具</a> <div>在自动化测试、网页数据爬取、批量操作网页等场景中,Selenium无疑是最受欢迎的工具之一。作为一款强大的Web自动化工具,它能模拟人类操作浏览器的行为,实现点击、输入、跳转等一系列动作。本文将从基础到进阶,全面解析Selenium的核心用法,帮你快速掌握这一工具的精髓。一、元素定位:找到网页的"积木"操作网页的前提是准确定位元素。Selenium提供了8种定位方式,覆盖绝大多数场景:定位方式方法</div> </li> <li><a href="/article/1949230177275932672.htm" title="【自动化测试】web前端组件测试范围梳理" target="_blank">【自动化测试】web前端组件测试范围梳理</a> <span class="text-muted">阿槿吃糖</span> <a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF%E8%87%AA%E5%8A%A8%E5%8C%96%E6%B5%8B%E8%AF%95/1.htm">前端自动化测试</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a> <div>测试组件范围划分按钮文字链接单选框多选框输入框计数器选择器级联选择器开关日期选择器上传分页弹窗导航菜单表格富文本编辑器前端组件测试范围梳理-png</div> </li> <li><a href="/article/1949220125433458688.htm" title="selenium.common.exceptions.NoSuchElementException: Message: An element could not be located on th..." target="_blank">selenium.common.exceptions.NoSuchElementException: Message: An element could not be located on th...</a> <span class="text-muted">DuffyMagic</span> <div>场景:appium+python+android自动化测试问题:selenium.common.exceptions.NoSuchElementException:Message:Anelementcouldnotbelocatedonthepageusingthegivensearchparameters解决:在capabilities参数里加入'automationName':'uiautom</div> </li> <li><a href="/article/1949213278123126784.htm" title="3步掌握JMeter与Jenkins自动化性能测试!" target="_blank">3步掌握JMeter与Jenkins自动化性能测试!</a> <span class="text-muted">爱吃 香菜</span> <a class="tag" taget="_blank" href="/search/%E8%BD%AF%E4%BB%B6%E6%B5%8B%E8%AF%95/1.htm">软件测试</a><a class="tag" taget="_blank" href="/search/%E8%87%AA%E5%8A%A8%E5%8C%96%E6%B5%8B%E8%AF%95/1.htm">自动化测试</a><a class="tag" taget="_blank" href="/search/%E8%81%8C%E5%9C%BA%E7%BB%8F%E9%AA%8C/1.htm">职场经验</a><a class="tag" taget="_blank" href="/search/jmeter/1.htm">jmeter</a><a class="tag" taget="_blank" href="/search/jenkins/1.htm">jenkins</a><a class="tag" taget="_blank" href="/search/%E8%87%AA%E5%8A%A8%E5%8C%96%E6%B5%8B%E8%AF%95/1.htm">自动化测试</a><a class="tag" taget="_blank" href="/search/%E8%81%8C%E5%9C%BA%E7%BB%8F%E9%AA%8C/1.htm">职场经验</a><a class="tag" taget="_blank" href="/search/%E8%BD%AF%E4%BB%B6%E6%B5%8B%E8%AF%95/1.htm">软件测试</a><a class="tag" taget="_blank" href="/search/%E7%A8%8B%E5%BA%8F%E5%91%98/1.htm">程序员</a><a class="tag" taget="_blank" href="/search/%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0/1.htm">深度学习</a> <div>面试求职:「面试试题小程序」,内容涵盖测试基础、Linux操作系统、MySQL数据库、Web功能测试、接口测试、APPium移动端测试、Python知识、Selenium自动化测试相关、性能测试、性能测试、计算机网络知识、Jmeter、HR面试,命中率杠杠的。(大家刷起来…)职场经验干货:软件测试工程师简历上如何编写个人信息(一周8个面试)软件测试工程师简历上如何编写专业技能(一周8个面试)软件测</div> </li> <li><a href="/article/1949211892828401664.htm" title="【自动化测试】Selenium Python UI自动化测试实用教程" target="_blank">【自动化测试】Selenium Python UI自动化测试实用教程</a> <span class="text-muted">软件测试-阿涛</span> <a class="tag" taget="_blank" href="/search/%E8%87%AA%E5%8A%A8%E5%8C%96%E6%B5%8B%E8%AF%95/1.htm">自动化测试</a><a class="tag" taget="_blank" href="/search/python%E5%AD%A6%E4%B9%A0/1.htm">python学习</a><a class="tag" taget="_blank" href="/search/selenium/1.htm">selenium</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/ui/1.htm">ui</a><a class="tag" taget="_blank" href="/search/%E8%87%AA%E5%8A%A8%E5%8C%96/1.htm">自动化</a> <div>一、引言:Selenium与UI自动化测试基础1.1Selenium简介Selenium是一个开源的Web应用自动化测试框架,支持多浏览器(Chrome、Firefox、Edge等)和多编程语言(Python、Java、JavaScript等),核心组件包括:WebDriver:通过浏览器原生API控制浏览器,模拟用户操作(点击、输入等),无侵入性。IDE:浏览器插件,支持录制/回放操作,可导出测</div> </li> <li><a href="/article/1949210503096102912.htm" title="从软件测试到自动化测试,待遇翻倍,我整理的超全学习指南!" target="_blank">从软件测试到自动化测试,待遇翻倍,我整理的超全学习指南!</a> <span class="text-muted">软件测试山月</span> <a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E5%8E%8B%E5%8A%9B%E6%B5%8B%E8%AF%95/1.htm">压力测试</a><a class="tag" taget="_blank" href="/search/%E5%8D%95%E5%85%83%E6%B5%8B%E8%AF%95/1.htm">单元测试</a><a class="tag" taget="_blank" href="/search/jmeter/1.htm">jmeter</a><a class="tag" taget="_blank" href="/search/%E8%87%AA%E5%8A%A8%E5%8C%96%E6%B5%8B%E8%AF%95/1.htm">自动化测试</a> <div>交流讨论:欢迎加入我们一起学习!资源分享:耗时200+小时精选的「软件测试」资料包教程推荐:火遍全网的《软件测试》教程欢迎点赞收藏⭐留言如有错误敬请指正!因为我最近在分享自动化测试技术,经常被问到:功能测试想转自动化,请问应该怎么入手?有没有好的资源推荐?那么,接下来我就结合自己的经历聊一聊我是如何在工作中做自动化测试的。(学习路线和网盘资源放在文末了)测试新人我的职业生涯开始和大多数测试人一样,</div> </li> <li><a href="/article/1949209621814112256.htm" title="接口自动化测试框架搭建" target="_blank">接口自动化测试框架搭建</a> <span class="text-muted">测试老哥</span> <a class="tag" taget="_blank" href="/search/%E6%B5%8B%E8%AF%95%E7%94%A8%E4%BE%8B/1.htm">测试用例</a><a class="tag" taget="_blank" href="/search/%E8%BD%AF%E4%BB%B6%E6%B5%8B%E8%AF%95/1.htm">软件测试</a><a class="tag" taget="_blank" href="/search/%E8%87%AA%E5%8A%A8%E5%8C%96%E6%B5%8B%E8%AF%95/1.htm">自动化测试</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E8%81%8C%E5%9C%BA%E5%92%8C%E5%8F%91%E5%B1%95/1.htm">职场和发展</a><a class="tag" taget="_blank" href="/search/%E6%B5%8B%E8%AF%95%E5%B7%A5%E5%85%B7/1.htm">测试工具</a><a class="tag" taget="_blank" href="/search/%E6%8E%A5%E5%8F%A3%E6%B5%8B%E8%AF%95/1.htm">接口测试</a> <div>点击文末小卡片,免费获取软件测试全套资料,资料在手,涨薪更快一、原理及特点参数放在XML文件中进行管理用httpClient简单封装一个httpUtils工具类测试用例管理使用了testNg管理,使用了TestNG参数化测试,通过xml文件来执行case。测试报告这里用到第三方的包ReportNG项目组织用Maven二、准备使用工具:eclipse,maven用到的第三方jar包:dom4j、re</div> </li> <li><a href="/article/1949191333763674112.htm" title="Python MCP智能代码助手:构建下一代AI驱动的开发工具生态" target="_blank">Python MCP智能代码助手:构建下一代AI驱动的开发工具生态</a> <span class="text-muted">熊猫钓鱼>_></span> <a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a> <div>在软件开发日益复杂化的今天,开发者面临着代码质量管理、自动化测试、智能重构等多重挑战。ModelContextProtocol(MCP)作为连接AI模型与开发工具的标准化协议,为构建智能代码助手提供了强大的技术基础。本文将深入探讨如何基于PythonMCP技术构建一个全面的智能代码助手系统,涵盖代码分析、自动生成、质量检测、性能优化等核心功能。目录MCP在代码开发中的应用价值智能代码助手系统架构设</div> </li> <li><a href="/article/1949058304453963776.htm" title="自动化测试脚本适配不同系统的注意事项" target="_blank">自动化测试脚本适配不同系统的注意事项</a> <span class="text-muted">金玉满堂@bj</span> <a class="tag" taget="_blank" href="/search/python/1.htm">python</a> <div>自动化测试脚本适配不同系统的注意事项在自动化测试脚本中适配Windows和Linux系统,需重点关注系统差异对脚本执行的影响。以下是关键注意事项及解决方案:一、文件路径与目录处理核心问题:路径分隔符不同(Windows用\,Linux用/)。根目录表示不同(Windows用盘符C:\,Linux用/)。目录大小写敏感性不同(Linux严格区分,Windows不区分)。解决方案:使用跨平台路径工具:</div> </li> <li><a href="/article/1948925140100247552.htm" title="使用全新 Android 模拟器工具进行持续测试" target="_blank">使用全新 Android 模拟器工具进行持续测试</a> <span class="text-muted">谷歌开发者</span> <div>作者/LingfengYang,AndroidStudioteam开发者在日常的开发工作中往往会先使用Android模拟器来快速测试修改过的应用,然后再提交代码。此外,开发者越来越多地在其持续集成(CI,ContinuousIntegration)系统中使用模拟器来运行较大规模的自动化测试。为了更好地支持这些用例,我们开源了AndroidEmulatorContainerScript,并围绕以下两</div> </li> <li><a href="/article/1948832023917424640.htm" title="【JS逆向基础】script框架" target="_blank">【JS逆向基础】script框架</a> <span class="text-muted">是星凡呢</span> <a class="tag" taget="_blank" href="/search/python%E4%B8%8EJS%E9%80%86%E5%90%91/1.htm">python与JS逆向</a><a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a><a class="tag" taget="_blank" href="/search/ecmascript/1.htm">ecmascript</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/JS%E9%80%86%E5%90%91/1.htm">JS逆向</a> <div>scrapy框架1,基本介绍Scrapy一个开源和协作的框架,其最初是为了页面抓取(更确切来说,网络抓取)所设计的,使用它可以以快速、简单、可扩展的方式从网站中提取所需的数据。但目前Scrapy的用途十分广泛,可用于如数据挖掘、监测和自动化测试等领域,也可以应用在获取API所返回的数据(例如AmazonAssociatesWebServices)或者通用的网络爬虫。Scrapy是基于twisted</div> </li> <li><a href="/article/1948796961326952448.htm" title="C#【自动化测试】对Windows桌面应用程序进行UI自动化测试" target="_blank">C#【自动化测试】对Windows桌面应用程序进行UI自动化测试</a> <span class="text-muted">ElecNoon</span> <a class="tag" taget="_blank" href="/search/C%23%E5%BF%85%E5%A4%87%E6%8A%80%E8%83%BD/1.htm">C#必备技能</a><a class="tag" taget="_blank" href="/search/c%23/1.htm">c#</a><a class="tag" taget="_blank" href="/search/windows/1.htm">windows</a><a class="tag" taget="_blank" href="/search/%E8%87%AA%E5%8A%A8%E5%8C%96%E6%B5%8B%E8%AF%95/1.htm">自动化测试</a> <div>文章目录1、文章一:题记UI自动化测试参考2、文章二:3、重要资源【实例】:1)已验证可用【非常好的例子,便于理解】关键代码2)未验证1、文章一:题记本文简述如何利用appium对Windows桌面应用程序进行UI自动化测试。UI自动化测试所谓UI自动化测试,就是模拟一个用户,对应用程序的UI进行操作,以完成特定场景的功能性集成测试。要对Windows桌面应用程序进行UI自动化测试,目前可选的技术</div> </li> <li><a href="/article/1948585804146208768.htm" title="从零开始手把手教你:创建第一个 React Native 自动化测试工具 Detox,轻松实现移动端 UI 自动化" target="_blank">从零开始手把手教你:创建第一个 React Native 自动化测试工具 Detox,轻松实现移动端 UI 自动化</a> <span class="text-muted">有事的没事人</span> <a class="tag" taget="_blank" href="/search/react/1.htm">react</a><a class="tag" taget="_blank" href="/search/native/1.htm">native</a><a class="tag" taget="_blank" href="/search/%E8%87%AA%E5%8A%A8%E5%8C%96/1.htm">自动化</a><a class="tag" taget="_blank" href="/search/%E6%B5%8B%E8%AF%95%E5%B7%A5%E5%85%B7/1.htm">测试工具</a> <div>从零开始手把手教你:创建第一个ReactNative自动化测试工具Detox,轻松实现移动端UI自动化在ReactNative跨平台开发中,确保iOS和Android两端UI表现一致、功能稳定是测试的核心挑战。Detox作为专为ReactNative打造的灰盒自动化测试框架,通过直接与应用代码交互,解决了传统UI测试工具速度慢、稳定性差的问题。本文将手把手教你搭建Detox环境,编写第一个自动化测</div> </li> <li><a href="/article/1948162090216779776.htm" title="浅谈AI和开发者" target="_blank">浅谈AI和开发者</a> <span class="text-muted"></span> <div>AI是在帮助开发者还是取代他们?在软件开发领域,生成式人工智能(AIGC)正在改变开发者的工作方式。无论是代码生成、错误检测还是自动化测试,AI工具正在成为开发者的得力助手。然而,这也引发了对开发者职业前景和技能需求变化的讨论。AI究竟是在帮助开发者还是取代他们?引言人工智能(ArtificialIntelligence,AI)作为一种新兴的技术,正在以前所未有的速度和规模改变着我们的生活和工作方</div> </li> <li><a href="/article/1948064641838018560.htm" title="自动化测试中,测试数据如何管理?" target="_blank">自动化测试中,测试数据如何管理?</a> <span class="text-muted">鱼鱼说测试</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/%E6%9C%8D%E5%8A%A1%E5%99%A8/1.htm">服务器</a> <div>今晚在某个测试群,看到有人问了一个问题:把测试数据放配置文件读取和放文件通过函数调用读取有什么区别?Python接口自动化测试零基础入门到精通(2025最新版)当时我下意识的这么回答:数据量越大,配置文件越臃肿,放在专门的数据文件(比如excel,csv),方便针对性的维护。乍看没毛病,但回头和人讨论这个问题的时候,就认真思考了一下这个问题,下面是我的一些思考和讨论的一些结果,仅供参考。。。自动化</div> </li> <li><a href="/article/33.htm" title="Spring的注解积累" target="_blank">Spring的注解积累</a> <span class="text-muted">yijiesuifeng</span> <a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a><a class="tag" taget="_blank" href="/search/%E6%B3%A8%E8%A7%A3/1.htm">注解</a> <div>用注解来向Spring容器注册Bean。   需要在applicationContext.xml中注册: <context:component-scan base-package=”pagkage1[,pagkage2,…,pagkageN]”/>。 如:在base-package指明一个包    <context:component-sc</div> </li> <li><a href="/article/160.htm" title="传感器" target="_blank">传感器</a> <span class="text-muted">百合不是茶</span> <a class="tag" taget="_blank" href="/search/android/1.htm">android</a><a class="tag" taget="_blank" href="/search/%E4%BC%A0%E6%84%9F%E5%99%A8/1.htm">传感器</a> <div>android传感器的作用主要就是来获取数据,根据得到的数据来触发某种事件   下面就以重力传感器为例;   1,在onCreate中获得传感器服务   private SensorManager sm;// 获得系统的服务 private Sensor sensor;// 创建传感器实例 @Override protected void </div> </li> <li><a href="/article/287.htm" title="[光磁与探测]金吕玉衣的意义" target="_blank">[光磁与探测]金吕玉衣的意义</a> <span class="text-muted">comsci</span> <div>      这是一个古代人的秘密:现在告诉大家       信不信由你们:       穿上金律玉衣的人,如果处于灵魂出窍的状态,可以飞到宇宙中去看星星       这就是为什么古代</div> </li> <li><a href="/article/414.htm" title="精简的反序打印某个数" target="_blank">精简的反序打印某个数</a> <span class="text-muted">沐刃青蛟</span> <a class="tag" taget="_blank" href="/search/%E6%89%93%E5%8D%B0/1.htm">打印</a> <div>以前看到一些让求反序打印某个数的程序。 比如:输入123,输出321。   记得以前是告诉你是几位数的,当时就抓耳挠腮,完全没有思路。   似乎最后是用到%和/方法解决的。   而今突然想到一个简短的方法,就可以实现任意位数的反序打印(但是如果是首位数或者尾位数为0时就没有打印出来了)   代码如下: long num, num1=0;</div> </li> <li><a href="/article/541.htm" title="PHP:6种方法获取文件的扩展名" target="_blank">PHP:6种方法获取文件的扩展名</a> <span class="text-muted">IT独行者</span> <a class="tag" taget="_blank" href="/search/PHP/1.htm">PHP</a><a class="tag" taget="_blank" href="/search/%E6%89%A9%E5%B1%95%E5%90%8D/1.htm">扩展名</a> <div>  PHP:6种方法获取文件的扩展名   1、字符串查找和截取的方法   1 $extension = substr ( strrchr ( $file ,  '.' ), 1); 2、字符串查找和截取的方法二   1 $extension = substr </div> </li> <li><a href="/article/668.htm" title="面试111" target="_blank">面试111</a> <span class="text-muted">文强chu</span> <a class="tag" taget="_blank" href="/search/%E9%9D%A2%E8%AF%95/1.htm">面试</a> <div> 1事务隔离级别有那些 ,事务特性是什么(问到一次) 2 spring aop 如何管理事务的,如何实现的。动态代理如何实现,jdk怎么实现动态代理的,ioc是怎么实现的,spring是单例还是多例,有那些初始化bean的方式,各有什么区别(经常问) 3 struts默认提供了那些拦截器 (一次) 4 过滤器和拦截器的区别 (频率也挺高) 5 final,finally final</div> </li> <li><a href="/article/795.htm" title="XML的四种解析方式" target="_blank">XML的四种解析方式</a> <span class="text-muted">小桔子</span> <a class="tag" taget="_blank" href="/search/dom/1.htm">dom</a><a class="tag" taget="_blank" href="/search/jdom/1.htm">jdom</a><a class="tag" taget="_blank" href="/search/dom4j/1.htm">dom4j</a><a class="tag" taget="_blank" href="/search/sax/1.htm">sax</a> <div>在平时工作中,难免会遇到把 XML 作为数据存储格式。面对目前种类繁多的解决方案,哪个最适合我们呢?在这篇文章中,我对这四种主流方案做一个不完全评测,仅仅针对遍历 XML 这块来测试,因为遍历 XML 是工作中使用最多的(至少我认为)。   预 备   测试环境:   AMD 毒龙1.4G OC 1.5G、256M DDR333、Windows2000 Server </div> </li> <li><a href="/article/922.htm" title="wordpress中常见的操作" target="_blank">wordpress中常见的操作</a> <span class="text-muted">aichenglong</span> <a class="tag" taget="_blank" href="/search/%E4%B8%AD%E6%96%87%E6%B3%A8%E5%86%8C/1.htm">中文注册</a><a class="tag" taget="_blank" href="/search/wordpress/1.htm">wordpress</a><a class="tag" taget="_blank" href="/search/%E7%A7%BB%E9%99%A4%E8%8F%9C%E5%8D%95/1.htm">移除菜单</a> <div>1 wordpress中使用中文名注册解决办法   1)使用插件   2)修改wp源代码      进入到wp-include/formatting.php文件中找到       function sanitize_user( $username, $strict = false </div> </li> <li><a href="/article/1049.htm" title="小飞飞学管理-1" target="_blank">小飞飞学管理-1</a> <span class="text-muted">alafqq</span> <a class="tag" taget="_blank" href="/search/%E7%AE%A1%E7%90%86/1.htm">管理</a> <div>项目管理的下午题,其实就在提出问题(挑刺),分析问题,解决问题。 今天我随意看下10年上半年的第一题。主要就是项目经理的提拨和培养。 结合我自己经历写下心得 对于公司选拔和培养项目经理的制度有什么毛病呢? 1,公司考察,选拔项目经理,只关注技术能力,而很少或没有关注管理方面的经验,能力。 2,公司对项目经理缺乏必要的项目管理知识和技能方面的培训。 3,公司对项目经理的工作缺乏进行指</div> </li> <li><a href="/article/1176.htm" title="IO输入输出部分探讨" target="_blank">IO输入输出部分探讨</a> <span class="text-muted">百合不是茶</span> <a class="tag" taget="_blank" href="/search/IO/1.htm">IO</a> <div>  //文件处理  在处理文件输入输出时要引入java.IO这个包; /* 1,运用File类对文件目录和属性进行操作 2,理解流,理解输入输出流的概念 3,使用字节/符流对文件进行读/写操作 4,了解标准的I/O 5,了解对象序列化 */   //1,运用File类对文件目录和属性进行操作   //在工程中线创建一个text.txt</div> </li> <li><a href="/article/1303.htm" title="getElementById的用法" target="_blank">getElementById的用法</a> <span class="text-muted">bijian1013</span> <a class="tag" taget="_blank" href="/search/element/1.htm">element</a> <div>        getElementById是通过Id来设置/返回HTML标签的属性及调用其事件与方法。用这个方法基本上可以控制页面所有标签,条件很简单,就是给每个标签分配一个ID号。        返回具有指定ID属性值的第一个对象的一个引用。        语法: &n</div> </li> <li><a href="/article/1430.htm" title="励志经典语录" target="_blank">励志经典语录</a> <span class="text-muted">bijian1013</span> <a class="tag" taget="_blank" href="/search/%E5%8A%B1%E5%BF%97/1.htm">励志</a><a class="tag" taget="_blank" href="/search/%E4%BA%BA%E7%94%9F/1.htm">人生</a> <div>经典语录1:   哈佛有一个著名的理论:人的差别在于业余时间,而一个人的命运决定于晚上8点到10点之间。每晚抽出2个小时的时间用来阅读、进修、思考或参加有意的演讲、讨论,你会发现,你的人生正在发生改变,坚持数年之后,成功会向你招手。不要每天抱着QQ/MSN/游戏/电影/肥皂剧……奋斗到12点都舍不得休息,看就看一些励志的影视或者文章,不要当作消遣;学会思考人生,学会感悟人生</div> </li> <li><a href="/article/1557.htm" title="[MongoDB学习笔记三]MongoDB分片" target="_blank">[MongoDB学习笔记三]MongoDB分片</a> <span class="text-muted">bit1129</span> <a class="tag" taget="_blank" href="/search/mongodb/1.htm">mongodb</a> <div>MongoDB的副本集(Replica Set)一方面解决了数据的备份和数据的可靠性问题,另一方面也提升了数据的读写性能。MongoDB分片(Sharding)则解决了数据的扩容问题,MongoDB作为云计算时代的分布式数据库,大容量数据存储,高效并发的数据存取,自动容错等是MongoDB的关键指标。 本篇介绍MongoDB的切片(Sharding)   1.何时需要分片 &nbs</div> </li> <li><a href="/article/1684.htm" title="【Spark八十三】BlockManager在Spark中的使用场景" target="_blank">【Spark八十三】BlockManager在Spark中的使用场景</a> <span class="text-muted">bit1129</span> <a class="tag" taget="_blank" href="/search/manager/1.htm">manager</a> <div>1. Broadcast变量的存储,在HttpBroadcast类中可以知道 2. RDD通过CacheManager存储RDD中的数据,CacheManager也是通过BlockManager进行存储的 3. ShuffleMapTask得到的结果数据,是通过FileShuffleBlockManager进行管理的,而FileShuffleBlockManager最终也是使用BlockMan</div> </li> <li><a href="/article/1811.htm" title="yum方式部署zabbix" target="_blank">yum方式部署zabbix</a> <span class="text-muted">ronin47</span> <a class="tag" taget="_blank" href="/search/yum%E6%96%B9%E5%BC%8F%E9%83%A8%E7%BD%B2zabbix/1.htm">yum方式部署zabbix</a> <div>安装网络yum库#rpm -ivh http://repo.zabbix.com/zabbix/2.4/rhel/6/x86_64/zabbix-release-2.4-1.el6.noarch.rpm 通过yum装mysql和zabbix调用的插件还有agent代理#yum install zabbix-server-mysql zabbix-web-mysql mysql-</div> </li> <li><a href="/article/1938.htm" title="Hibernate4和MySQL5.5自动创建表失败问题解决方法" target="_blank">Hibernate4和MySQL5.5自动创建表失败问题解决方法</a> <span class="text-muted">byalias</span> <a class="tag" taget="_blank" href="/search/J2EE/1.htm">J2EE</a><a class="tag" taget="_blank" href="/search/Hibernate4/1.htm">Hibernate4</a> <div>今天初学Hibernate4,了解了使用Hibernate的过程。大体分为4个步骤: ①创建hibernate.cfg.xml文件 ②创建持久化对象 ③创建*.hbm.xml映射文件 ④编写hibernate相应代码 在第四步中,进行了单元测试,测试预期结果是hibernate自动帮助在数据库中创建数据表,结果JUnit单元测试没有问题,在控制台打印了创建数据表的SQL语句,但在数据库中</div> </li> <li><a href="/article/2065.htm" title="Netty源码学习-FrameDecoder" target="_blank">Netty源码学习-FrameDecoder</a> <span class="text-muted">bylijinnan</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/netty/1.htm">netty</a> <div>Netty 3.x的user guide里FrameDecoder的例子,有几个疑问: 1.文档说:FrameDecoder calls decode method with an internally maintained cumulative buffer whenever new data is received. 为什么每次有新数据到达时,都会调用decode方法? 2.Dec</div> </li> <li><a href="/article/2192.htm" title="SQL行列转换方法" target="_blank">SQL行列转换方法</a> <span class="text-muted">chicony</span> <a class="tag" taget="_blank" href="/search/%E8%A1%8C%E5%88%97%E8%BD%AC%E6%8D%A2/1.htm">行列转换</a> <div> create table tb(终端名称 varchar(10) , CEI分值 varchar(10) , 终端数量 int) insert into tb values('三星' , '0-5' , 74) insert into tb values('三星' , '10-15' , 83) insert into tb values('苹果' , '0-5' , 93) </div> </li> <li><a href="/article/2319.htm" title="中文编码测试" target="_blank">中文编码测试</a> <span class="text-muted">ctrain</span> <a class="tag" taget="_blank" href="/search/%E7%BC%96%E7%A0%81/1.htm">编码</a> <div>循环打印转换编码 String[] codes = { "iso-8859-1", "utf-8", "gbk", "unicode" }; for (int i = 0; i < codes.length; i++) { for (int j </div> </li> <li><a href="/article/2446.htm" title="hive 客户端查询报堆内存溢出解决方法" target="_blank">hive 客户端查询报堆内存溢出解决方法</a> <span class="text-muted">daizj</span> <a class="tag" taget="_blank" href="/search/hive/1.htm">hive</a><a class="tag" taget="_blank" href="/search/%E5%A0%86%E5%86%85%E5%AD%98%E6%BA%A2%E5%87%BA/1.htm">堆内存溢出</a> <div>hive> select * from t_test where ds=20150323 limit 2; OK Exception in thread "main" java.lang.OutOfMemoryError: Java heap space   问题原因: hive堆内存默认为256M   这个问题的解决方法为: 修改/us</div> </li> <li><a href="/article/2573.htm" title="人有多大懒,才有多大闲 (评论『卓有成效的程序员』)" target="_blank">人有多大懒,才有多大闲 (评论『卓有成效的程序员』)</a> <span class="text-muted">dcj3sjt126com</span> <a class="tag" taget="_blank" href="/search/%E7%A8%8B%E5%BA%8F%E5%91%98/1.htm">程序员</a> <div>  卓有成效的程序员给我的震撼很大,程序员作为特殊的群体,有的人可以这么懒,  懒到事情都交给机器去做 ,而有的人又可以那么勤奋,每天都孜孜不倦得做着重复单调的工作。   在看这本书之前,我属于勤奋的人,而看完这本书以后,我要努力变成懒惰的人。 不要在去庞大的开始菜单里面一项一项搜索自己的应用程序,也不要在自己的桌面上放置眼花缭乱的快捷图标</div> </li> <li><a href="/article/2700.htm" title="Eclipse简单有用的配置" target="_blank">Eclipse简单有用的配置</a> <span class="text-muted">dcj3sjt126com</span> <a class="tag" taget="_blank" href="/search/eclipse/1.htm">eclipse</a> <div>1、显示行号  Window -- Prefences -- General -- Editors -- Text Editors -- show line numbers   2、代码提示字符 Window ->Perferences,并依次展开 Java -> Editor -> Content Assist,最下面一栏 auto-Activation</div> </li> <li><a href="/article/2827.htm" title="在tomcat上面安装solr4.8.0全过程" target="_blank">在tomcat上面安装solr4.8.0全过程</a> <span class="text-muted">eksliang</span> <a class="tag" taget="_blank" href="/search/Solr/1.htm">Solr</a><a class="tag" taget="_blank" href="/search/solr4.0%E5%90%8E%E7%9A%84%E7%89%88%E6%9C%AC%E5%AE%89%E8%A3%85/1.htm">solr4.0后的版本安装</a><a class="tag" taget="_blank" href="/search/solr4.8.0%E5%AE%89%E8%A3%85/1.htm">solr4.8.0安装</a> <div>转载请出自出处: http://eksliang.iteye.com/blog/2096478       首先solr是一个基于java的web的应用,所以安装solr之前必须先安装JDK和tomcat,我这里就先省略安装tomcat和jdk了         第一步:当然是下载去官网上下载最新的solr版本,下载地址</div> </li> <li><a href="/article/2954.htm" title="Android APP通用型拒绝服务、漏洞分析报告" target="_blank">Android APP通用型拒绝服务、漏洞分析报告</a> <span class="text-muted">gg163</span> <a class="tag" taget="_blank" href="/search/%E6%BC%8F%E6%B4%9E/1.htm">漏洞</a><a class="tag" taget="_blank" href="/search/android/1.htm">android</a><a class="tag" taget="_blank" href="/search/APP/1.htm">APP</a><a class="tag" taget="_blank" href="/search/%E5%88%86%E6%9E%90/1.htm">分析</a> <div>点评:记得曾经有段时间很多SRC平台被刷了大量APP本地拒绝服务漏洞,移动安全团队爱内测(ineice.com)发现了一个安卓客户端的通用型拒绝服务漏洞,来看看他们的详细分析吧。  0xr0ot和Xbalien交流所有可能导致应用拒绝服务的异常类型时,发现了一处通用的本地拒绝服务漏洞。该通用型本地拒绝服务可以造成大面积的app拒绝服务。  针对序列化对象而出现的拒绝服务主要</div> </li> <li><a href="/article/3081.htm" title="HoverTree项目已经实现分层" target="_blank">HoverTree项目已经实现分层</a> <span class="text-muted">hvt</span> <a class="tag" taget="_blank" href="/search/%E7%BC%96%E7%A8%8B/1.htm">编程</a><a class="tag" taget="_blank" href="/search/.net/1.htm">.net</a><a class="tag" taget="_blank" href="/search/Web/1.htm">Web</a><a class="tag" taget="_blank" href="/search/C%23/1.htm">C#</a><a class="tag" taget="_blank" href="/search/ASP.ENT/1.htm">ASP.ENT</a> <div>HoverTree项目已经初步实现分层,源代码已经上传到 http://hovertree.codeplex.com请到SOURCE CODE查看。在本地用SQL Server 2008 数据库测试成功。数据库和表请参考:http://keleyi.com/a/bjae/ue6stb42.htmHoverTree是一个ASP.NET 开源项目,希望对你学习ASP.NET或者C#语言有帮助,如果你对</div> </li> <li><a href="/article/3208.htm" title="Google Maps API v3: Remove Markers 移除标记" target="_blank">Google Maps API v3: Remove Markers 移除标记</a> <span class="text-muted">天梯梦</span> <a class="tag" taget="_blank" href="/search/google+maps+api/1.htm">google maps api</a> <div>Simply do the following:   I. Declare a global variable: var markersArray = [];   II. Define a function: function clearOverlays() { for (var i = 0; i < markersArray.length; i++ )</div> </li> <li><a href="/article/3335.htm" title="jQuery选择器总结" target="_blank">jQuery选择器总结</a> <span class="text-muted">lq38366</span> <a class="tag" taget="_blank" href="/search/jquery/1.htm">jquery</a><a class="tag" taget="_blank" href="/search/%E9%80%89%E6%8B%A9%E5%99%A8/1.htm">选择器</a> <div>  1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40</div> </li> <li><a href="/article/3462.htm" title="基础数据结构和算法六:Quick sort" target="_blank">基础数据结构和算法六:Quick sort</a> <span class="text-muted">sunwinner</span> <a class="tag" taget="_blank" href="/search/Algorithm/1.htm">Algorithm</a><a class="tag" taget="_blank" href="/search/Quicksort/1.htm">Quicksort</a> <div>Quick sort is probably used more widely than any other. It is popular because it is not difficult to implement, works well for a variety of different kinds of input data, and is substantially faster t</div> </li> <li><a href="/article/3589.htm" title="如何让Flash不遮挡HTML div元素的技巧_HTML/Xhtml_网页制作" target="_blank">如何让Flash不遮挡HTML div元素的技巧_HTML/Xhtml_网页制作</a> <span class="text-muted">刘星宇</span> <a class="tag" taget="_blank" href="/search/html/1.htm">html</a><a class="tag" taget="_blank" href="/search/Web/1.htm">Web</a> <div>今天在写一个flash广告代码的时候,因为flash自带的链接,容易被当成弹出广告,所以做了一个div层放到flash上面,这样链接都是a触发的不会被拦截,但发现flash一直处于div层上面,原来flash需要加个参数才可以。 让flash置于DIV层之下的方法,让flash不挡住飘浮层或下拉菜单,让Flash不档住浮动对象或层的关键参数:wmode=opaque。 方法如下: </div> </li> <li><a href="/article/3716.htm" title="Mybatis实用Mapper SQL汇总示例" target="_blank">Mybatis实用Mapper SQL汇总示例</a> <span class="text-muted">wdmcygah</span> <a class="tag" taget="_blank" href="/search/sql/1.htm">sql</a><a class="tag" taget="_blank" href="/search/mysql/1.htm">mysql</a><a class="tag" taget="_blank" href="/search/mybatis/1.htm">mybatis</a><a class="tag" taget="_blank" href="/search/%E5%AE%9E%E7%94%A8/1.htm">实用</a> <div>Mybatis作为一个非常好用的持久层框架,相关资料真的是少得可怜,所幸的是官方文档还算详细。本博文主要列举一些个人感觉比较常用的场景及相应的Mapper SQL写法,希望能够对大家有所帮助。 不少持久层框架对动态SQL的支持不足,在SQL需要动态拼接时非常苦恼,而Mybatis很好地解决了这个问题,算是框架的一大亮点。对于常见的场景,例如:批量插入/更新/删除,模糊查询,多条件查询,联表查询,</div> </li> </ul> </div> </div> </div> <div> <div class="container"> <div class="indexes"> <strong>按字母分类:</strong> <a href="/tags/A/1.htm" target="_blank">A</a><a href="/tags/B/1.htm" target="_blank">B</a><a href="/tags/C/1.htm" target="_blank">C</a><a href="/tags/D/1.htm" target="_blank">D</a><a href="/tags/E/1.htm" target="_blank">E</a><a href="/tags/F/1.htm" target="_blank">F</a><a href="/tags/G/1.htm" target="_blank">G</a><a href="/tags/H/1.htm" target="_blank">H</a><a href="/tags/I/1.htm" target="_blank">I</a><a href="/tags/J/1.htm" target="_blank">J</a><a href="/tags/K/1.htm" target="_blank">K</a><a href="/tags/L/1.htm" target="_blank">L</a><a href="/tags/M/1.htm" target="_blank">M</a><a href="/tags/N/1.htm" target="_blank">N</a><a href="/tags/O/1.htm" target="_blank">O</a><a href="/tags/P/1.htm" target="_blank">P</a><a href="/tags/Q/1.htm" target="_blank">Q</a><a href="/tags/R/1.htm" target="_blank">R</a><a href="/tags/S/1.htm" target="_blank">S</a><a href="/tags/T/1.htm" target="_blank">T</a><a href="/tags/U/1.htm" target="_blank">U</a><a href="/tags/V/1.htm" target="_blank">V</a><a href="/tags/W/1.htm" target="_blank">W</a><a href="/tags/X/1.htm" target="_blank">X</a><a href="/tags/Y/1.htm" target="_blank">Y</a><a href="/tags/Z/1.htm" target="_blank">Z</a><a href="/tags/0/1.htm" target="_blank">其他</a> </div> </div> </div> <footer id="footer" class="mb30 mt30"> <div class="container"> <div class="footBglm"> <a target="_blank" href="/">首页</a> - <a target="_blank" href="/custom/about.htm">关于我们</a> - <a target="_blank" href="/search/Java/1.htm">站内搜索</a> - <a target="_blank" href="/sitemap.txt">Sitemap</a> - <a target="_blank" href="/custom/delete.htm">侵权投诉</a> </div> <div class="copyright">版权所有 IT知识库 CopyRight © 2000-2050 E-COM-NET.COM , All Rights Reserved. <!-- <a href="https://beian.miit.gov.cn/" rel="nofollow" target="_blank">京ICP备09083238号</a><br>--> </div> </div> </footer> <!-- 代码高亮 --> <script type="text/javascript" src="/static/syntaxhighlighter/scripts/shCore.js"></script> <script type="text/javascript" src="/static/syntaxhighlighter/scripts/shLegacy.js"></script> <script type="text/javascript" src="/static/syntaxhighlighter/scripts/shAutoloader.js"></script> <link type="text/css" rel="stylesheet" href="/static/syntaxhighlighter/styles/shCoreDefault.css"/> <script type="text/javascript" src="/static/syntaxhighlighter/src/my_start_1.js"></script> </body> </html>