postman做接口自动化测试

可能是目前最好用的web接口调试工具
无需注册(注册后可多终端同步用例)
免费(每年付费$60可用云服务,30天免费试用)
保存历史记录
支持录制请求
基于Chrome的V8引擎,支持JS脚本(基本支持ES6,浏览器相关对象和API和require() import等除外)
同样的代码和用例可用于自动化接口测试,见它的命令行版本Newman介绍
能生成各种语言的HTTP请求代码模板
能生成比较好看的在线API文档(支持MarkDown)
提供简易版持续集成(Monitor功能,只支持公网IP的请求…不如Jenkins实用)
选它的做自动化测试的理由:

满足互联网公司的多数场景
超轻,比另一个热门选择——JMeter门槛低、开发效率高、界面顺眼
开发几乎人手一个,容易沟通,容易推动开发自测
容易拉功能测试入坑,发生人员变动时容易交接
不选它的理由:

功能受限:Postman运行在沙盒里,Newman虽然基于Node.js,但一套脚本2边共用决定了它的功能不能比Postman多,无法用在以下场景:
需要读写文件
需要读写数据库
需要引入外部库,如不常见/自定义的加密方式
非HTTP协议
毕竟是调试小工具出身,和成熟的自动化测试框架在管理用例、代码复用、稳定性、报告,甚至易用性上都有明显差距,用的人要有足够能力从坑里爬出来
如果项目经常用JMeter做接口测试,有人足够熟悉JMeter,可以考虑把脚本拆分到单个接口的粒度,花点功夫把功能和性能自动化都做了,不用维护2套
如果全英文和缺乏中文资料也算的话
安装

https://www.getpostman.com/apps

建议选择Mac/Windows app,比起Chrome app,下载不需要FQ,功能更强大

基本使用

官方文档

教程

接口测试工具 postman, 2016-09-01(基于Chrome版的Postman,和桌面版大同小异)

[API 测试]postman, 2016-02-29

API自动化测试利器——Postman, 2015-09-26(教程里的版本比较旧了,但还是讲得不错)

How to write powerful automated API tests with Postman, Newman and Jenkins, 2015-09-03

How to write automated tests for APIs using Postman – Part 1, 2014-03-07

How to write automated tests for APIs with Postman – Part 2, 2014-04-17

Writing automated tests with Postman – Part 3, 2014-05-09

有些早期文章会提到Jetpack,曾经收10美元,现在成了Postman自带的Collection Runner,可以批量执行用例
示例

Postman Echo

Making the perfect HTTP request using Postman Echo, 2015-11-13

Cooper's Meal Plan

Conditional Workflows in Postman, 2016-03-23

Spotify Playlist Generator

Generate Spotify Playlists using a Postman Collection, 2016-11-09

CurencyCloud的Postman集合和使用说明

录制接口

Capturing requests (native app)

Using Postman Proxy to Capture and Inspect API Calls from iOS or Android Devices,2016-06-26

接口调用方希望测试业务逻辑时,用不着Fiddler/Charles抓包再往里面一个个填这么麻烦

开启Postman的代理(默认5555端口),浏览器/手机设好对应的IP和端口就行

支持正则表达式过滤URL,建议排除掉静态资源、流量统计站和别的后台进程时不时请求的网站

baidu|google|microsoft|github|qq\.com|.*\.(html?|css|js|png|jpe?g|webp|ico)$

可以设置保存的位置:

如果所有操作步骤都要做接口测试,建议直接保存到目标集合

如果一大堆操作里只取其中一个到几个接口,建议保存到历史记录,挑出想要的另存到目标集合,不用浪费时间删

Collection Runner

Running a collection

适合一次运行/调试多个用例,不用自己一个个点发送
适合开发自测接口性能(例如循环个10000次),至少响应时间和稳定性都过关了才交给别人调用
适合做简单的数据驱动测试——CSV文件里写上各种合法非法参数组合,1个集合/文件夹只放1个接口,关联起来点运行就是
runtime、默认行为(比如不保存环境变量)、可以指定数据文件等跟Newman一样,适合用界面调通了用例再放到命令行做持续集成
Postman集合的概念

导出之后可以看到1个集合其实就是1个json文件,打开文件就能看到,里面的item属性是个数组,每个用例都是数组里的1个JSON对象

Postman/Newman1次只能跑1个集合,各个集合之间没有任何关系

Postman文件夹的概念

文件夹实际上也是集合的item数组里的对象,它里面也有1个item数组,文件夹里的用例是这数组里面的对象

collection runner/Newman批量跑用例的最小粒度是文件夹

目前集合下只支持1级文件夹,不推荐场景搞太复杂,用例管理起来有难度
目前集合和文件夹只能按字母顺序排序,用例可以拖动排序
目前搜索不能搜到URL地址,建议用例名写成 /path/to/api 接口描述,方便看和搜索
如果打算做自动化和持续集成:

集合、文件夹的名字建议英文无空格,方便命令行调用
要么不放,要么全放文件夹
每个文件夹测完全独立的子场景,文件夹之间的用例不要有顺序、状态等依赖关系
如果你不是从写用例到搞持续集成都包了并且一直由你自己维护,不能假设别人会按你想要的方式、顺序、设置运行测试

别人写的脚本可能运行整个集合或逐个文件夹运行,不同文件夹之间可能同步可能异步,可能会保存运行中产生的环境变量也可能不保存

此外,越多耦合,稳定性越差,维护工作量越大

流程控制

只有在collection runner或Newman里才生效(在普通界面你选哪个发送就是哪个)

/* 假设2个用例的顺序为: 用例A 用例B 如果希望执行顺序为: 用例A -> 用例B -> 用例A,又不想复制一份用例A,那么 */ // 用例A的Tests里写 if (xxx) postman.setNextRequest('null'); // 终止执行 // 用例B的Tests里写 postman.setNextRequest('用例A'); // 【注意】如果不设终止条件,用例A执行完到用例B,用例B执行完又指向用例A,会构成死循环 // PS:postman是Postman提供的全局对象

断言

Testing Sandbox 内建对象、方法、变量和可用的第三方库介绍

Testing examples

Extracting data from responses and chaining requests, 2014-10-27

在主界面可以靠肉眼看返回结果,但在collection runner/Newman里如果不加断言,跑完没法知道是成功还是失败

断言写在Tests标签页里,上手可以参考文档和界面右边的代码模板:

tests['Status code is 200'] = responseCode.code === 200; // 推荐用全等 ===,确保类型和值都一致

tests['Response time is less than 200ms'] = responseTime < 200; tests['Body matches string'] = responseBody.has('xxx'); // 只要有指定关键字就行,在哪、有几个等都不管 tests['Content-Type is present'] = postman.getResponseHeader('Content-Type') || false; // Postman的断言实际上就是往全局对象

tests 添加键值对 // 它的key会显示在报告界面上,value是可以解析为boolean的表达式 // 如果得出的值是true,在报告里显示为成功,false失败 // 【变通】用总是为真的断言来显示信息 tests[`[INFO] Request params: ${JSON.stringify(request.data)}`] = true; // 显示所有请求参数(在自动化测试里很有用)

tests[`跑第${iteration + 1}次`] = true; // 用在runner里循环很多次时 // 迭代次数 iteration 是Postman提供的全局变量,从0开始 // PS:request是Postman提供的全局对象 // responseCode(对象)、responseTime(数字)、responseBody(字符串)目前是Postman收到服务器返回内容才声明的变量 //

【注意】如果你在做自动化测试,目前在接口超时没返回时: // responseCode、responseTime、responseBody都没定义,使用时会导致脚本出错,判断是否超时没返回的只能靠header // request.data里的变量在超时时不解析,很容易让人误会请求参数传错了,建议此时不显示这行

关于'use strict';

因为Postman提供了不少全局变量,写了'use strict';会在用到这些变量的地方出警告提示

如果平时有养成好习惯,不用容易出错的写法,不写它也没关系

提取接口返回值

返回JSON时

let json = JSON.parse(responseBody); // responseBody是包含整个返回内容的字符串

// 提取某字段的值: let foobar = json.foo.bar[0].foobar;

// 假设结构为 {"foo": {"bar": [{"foobar": 1}, {"baz": 2}]}}

// 想用在自动化测试可以多写点: let json; try { json = JSON.parse(responseBody); } catch (err) { tests['Expect response body to be valid JSON'] = false; tests[`Response body: ${responseBody}`] = true; console.error(err); }

返回HTML时

// A. 用正则表达式匹配 let foo = responseBody.match(/foo/g);

// g 全局 i 不分大小写 m 多行 tests['blahblahblah'] = foo[0] === 'bar';

// 正则里包含变量时: let foo = 'xxx'; let bar = responseBody.match(new RegExp(`^${foo}.*$`, 'g');

// B. 用CheerioJS库(可以让你用jQuery语法): const $ = cheerio.load(responseBody); $.html()

// 整个网页 $('title').text();

// 标签里的文字</p> <p>jQuery replaced by CheerioJS in Postman Sandbox, 2016-08-30</p> <p>提取请求参数的值</p> <p>利用Postman提供的request.data</p> <p>如果POST Body里选了form或x-www-form-urlencoded</p> <p>request对象的data属性是个对象,里面每个属性对应你填的参数名</p> <p>// 假设有个参数叫phone request.data.phone</p> <p>如果Body里选的是raw,request.data是字符串</p> <p>// 假设传JSON字符串,里面有叫做phone的属性 JSON.parse(request.data).phone</p> <p>设置环境变量</p> <p>Setting up an environment with variables</p> <p>Postman的环境变量分为 environment 和 global 2种</p> <p>实际上就是environment、globals这2个全局的对象(字典)里的内容</p> <p>它们的key作为变量名,value作为变量的值</p> <p>environment</p> <p>满足99%的需要,平时只用它就够了,global留到后文讲</p> <p>作用域为整个集合<br> 能创建多个environment文件,方便切换不同测试环境<br> 在地址栏、header、请求参数、外部数据文件里,用 {{变量名}} 获取环境变量的值</p> <p>如:{{URL}}/path/to/api</p> <p>(更常见的${}在JS的ES6语法里被占用了,Postman只能选这么个奇怪写法)</p> <p>在Pre-request Script和Tests的代码里略有不同:</p> <p>/* 官方提供的方法 */ // 设置 postman.setEnvironmentVariable('variableKey', value);</p> <p>// 注意:通过菜单或以上方法设置的环境变量,值会转成字符串,取的时候要转换</p> <p>// 获取 let foo = postman.getEnvironmentVariable('variableKey');</p> <p>// 最常用到字符串数字转数字:Number(foo) // 或者万能的 JSON.parse(foo) 字符串的数字、数组、对象、布尔值扔进去都能转成对应的类型 // 更新 // 就是再设置一次同名的环境变量,换别的值 // 清除环境变量 postman.clearEnvironmentVariable('variableKey');</p> <p>/* 懒人版 */</p> <p>// 既然知道实际上是操作 environment 对象,如果你有JS基础,可以直接:</p> <p>// 添加属性 environment.variableKey = 12345;</p> <p>// 少打字,取出时也不用转换类型</p> <p>// 获取 let foo = environment.variableKey;</p> <p>// 清除 delete environment.variableKey;</p> <p>// 不要用 environment.variableKey = undefined; 实际上属性还在,只是平时我们发现值是undefined时当它不存在了而已</p> <p>// 而Postman不这么干,它把undefined转成字符串……</p> <p>// 如果你非要跟自己过不去,用了变量名不允许的字符做key(比如有空格),只能写成 environment['variableKey']</p> <p>// 只要没跟自己过不去,可以用ES6的对象解构语法一次取多个: let {key1, key2, key3} = environment;</p> <p>【注意】</p> <p>在Postman主界面运行过后,通过代码设置的环境变量会存到IndexedDB,跟在菜单里设置一样,用例跑完不消失</p> <p>但在collection runner或Newman跑则是默认不保存,跑完就消失,做自动化测试时要注意</p> <p>动态请求参数</p> <p>在runner里循环发n次请求/做自动化测试时,有些接口不适合写死参数</p> <p>Postman有以下内建变量,适合一次性使用:<br> {{$guid}} // 生成GUID {{$timestamp}} // 当前时间戳 {{$randomInt}} // 0-1000的随机整数</p> <p>参数依赖上一个请求的返回:<br> 上个请求的Tests里提取参数存环境变量,这个请求里用{{变量名}}取值</p> <p>参数每次都不同,但之后的断言或别的请求里可能还要用:<br> 在Pre-request Script里写代码处理,存为环境变量,参数里用{{变量名}}取值</p> <p>例如</p> <p>const randomInt = (min, max) => Math.floor(Math.random() * (max - min + 1)) + min;</p> <p>// 随机整数 const getRandomValue = list => list[randomInt(0, list.length - 1)];</p> <p>// 随机选项 // 随机手机 environment.randomMobile = `18${randomInt(100000000, 999999999)}`;</p> <p>// 随机设备名 environment.randomDevice = getRandomValue(['ios', 'android']);</p> <p>Postman目前没有很方便的重用代码的手段,编辑框也不是IDE,没智能提示,尽量别整那么复杂</p> <p>调试</p> <p>cmd + alt + c(Windows ctrl + alt + c)打开Postman控制台,可以看请求和响应内容</p> <p>用console.log()打印,到控制台看</p> <p>或tests['这里拼出你想看的字符串'] = true在界面/报告看断言</p> <p>mock</p> <p>Using a mocking service to create Postman Collections,2016-01-26</p> <p>global</p> <p>不做自动化测试可以跳过这段</p> <p>跟environment几乎完全一样,在地址栏、header、请求参数、外部数据文件里也是{{}}调用,除了:</p> <p>只有1个global文件<br> 菜单藏得较深,在生成的API文档里也不解析,决定了它不适合做参数化<br> environment和global同名时,优先用environment<br> global只建议用在1种场景:定义公共函数</p> <p>先正常地写好函数,再用在线压缩工具压成一行</p> <p>在菜单里选 Bulk Edit,以每行一对 key:value 的形式编辑,变量名做key,函数做value</p> <p>assertNotTimeout:var hasResponse=postman.getResponseHeader('Content-Type')?true:false; if(!hasResponse)</p> <p>tests['服务端在超时前没返回任何数据,请检查相关服务、网络或反向代理设置(以下跳过其他断言)']=false; logParams:if(hasResponse)</p> <p>tests[`[INFO] 请求参数(仅限POST,超时没返回时不解析):${JSON.stringify(request.data)}`]=true; getResponseJson:try{if(hasResponse) var json=JSON.parse(responseBody);}catch(err){ tests['服务端没返回合法的JSON格式,请检查相关服务、网络或反向代理设置(以下跳过其他断言)']=false;</p> <p>tests[`[INFO] 返回:${responseBody}`]=true; console.error(err);} assertType:var assertType=(name,value,type)=>{let isType=(type==='array')? Array.isArray(value):typeof value===type; tests[`${name}为${type}(实际值:${value})`]=isType;}; assertEqual:var assertEqual=(name,actual,expected)=>{tests[`${name}等于${expected}(实际值:${actual})`]=actual===expected;}; assertNotEqual:var assertNotEqual=(name,actual,expected)=>{tests[`${name}不等于${expected}(实际值:${actual})`]=actual!==expected;}; // 注意在这里定义变量只有 var 的作用域够大,用 let 或 const 的话eval后就销毁了</p> <p>假设返回 {"name":"张三","userType":1,"settings":[]},在Tests里一上来就写:</p> <p>eval(globals.assertNotTimeout); // 判断是否超时(通过有没有Content-Type请求头),超时则断言失败 eval(globals.logParams); // 如果不超时,显示发出的请求参数 eval(globals.getResponseJson); // 如果不超时,解析返回的JSON对象,赋给json变量,返回值不合法则断言失败 // 下面定义了3个公共函数,免得每次断言都要写一大串: eval(globals.assertType); eval(globals.assertEqual); eval(globals.assertNotEqual); // 上面3个基本满足日常使用需要 if (json) { assertType('用户名', json.name, 'string'); // 在报告中显示为: '用户名为string,(实际值:张三)' assertType('设置', json.settings, 'array'); // JS里其实没有array类型(数组是object),这里做了处理,让报告更好懂 assertEqual('用户类型', json.userType, 1); // 显示为: '用户类型等于1,(实际值:1)' assertNotEqual('用户类型', json.userType, 2); // 显示为: '用户类型不等于2,(实际值:1)' }</p> <p>在官方给出更方便的重用代码的方法前,这是除了复制粘贴外唯一的重用方法</p> <p>如果不做自动化测试,且断言写得很简单,不建议这么搞</p> <p>如果不幸跳了自动化的坑,通常一个项目会有100~200个接口要做自动化测试,要仔细比较哪种方法成本更高</p> <p>定义函数前要仔细考虑好,万一中途要改参数和返回值,已经写好的n份也得改……</p> <p>建议定义的公共函数不超过个位数,并保留好没压缩的版本,不然别人没法接手</p> <p>Writing a behaviour driven API testing environment within Postman</p> <p>// 如果确实要在代码里设global // 官方的: postman.setGlobalVariable('variableKey', value); // 同样存成字符串 let bar = postman.getGlobalVariable('variableKey'); postman.clearGlobalVariable('variableKey'); // 或者自己操作 globals 对象</p> <p>数据文件</p> <p>不做自动化测试可以跳过这段</p> <p>Using data variables to run a collection multiple times</p> <p>Using CSV and JSON data files in the Postman Collection Runner, 2014-10-28</p> <p>Using variables inside Postman and Collection Runner, 2014-02-20</p> <p>在collection runner或命令行的Newman里可以加载数据文件</p> <p>/* JSON格式 */</p> <p>// 文件里有且只有1个数组,每个对象算1条用例(在Postman里的全局变量叫做data)</p> <p>// key作为变量名,value作为变量的值</p> <p>// 文件里依然可以用 {{}} 拿到环境变量,注意不要把自己绕进去:</p> <p>// 如果是Pre-request Script里生成的环境变量,直接写进请求参数,不用经这里 [ {"mobile": "17000000001", "pwd": "123456"}, {"mobile": "17000000002", "pwd": "654321"}, {"mobile": "17000000003", "pwd": ""}, {"mobile": "{{ADMIN_MOBILE}}", "pwd": "{{ADMIN_PWD}}"} ]</p> <p>// 显然,这是json文件,并不能在里面写代码(除非你蛋疼在value里写字符串然后在用例里eval)</p> <p>// 用例的请求参数里依然用 {{key}} 拿到数据文件里的值,代码里则是 data.key</p> <p>// 如果key跟environment/globals里的key重名,这里的 > environment > globals</p> <p>/* CSV格式 */</p> <p>// 第1行变量名,下面是值,每行1条用例,没有空格</p> <p>// 没JSON格式的数据文件灵活 mobile,pwd 17000000001,123456 17000000002,654321 17000000003,</p> <p>【注意】</p> <p>谨慎使用。这东西增加了调试和定位问题的复杂性,也就大大增加了维护成本</p> <p>而它带来的收益并不明显:</p> <p>针对单个接口的简单压力测试<br> Postman不是正经的压测工具,既然选择了它就是图简单方便</p> <p>像JMeter那样用CSV文件做数据源的意义不大,还得另外写程序/脚本生成这样的文件,时间上不划算</p> <p>直接用代码生成数据就好,不差那一两毫秒</p> <p>数据驱动测试:一条用例测多种参数组合,包括合法和非法值,避免复制粘贴n条略有不同的<br> 很诱人,但是</p> <p>产品设计时有考虑异常情况吗?<br> 需求来源是否统一?<br> 需求是否足够稳定?<br> 整个项目有统一的异常处理规范还是看开发个人习惯?<br> 如果不确定有些输入要不要/怎么处理,意味着改动可能会非常大</p> <p>今天非法,明天变合法,后天又变非法</p> <p>如果冒烟用例用在持续集成,有测试不通过会阻止发布,会严重干扰正常发版,也影响大家对自动化测试的信心</p> <p>此外</p> <p>内部的基础组件为了不同项目通用,可能会允许看起来相当没道理的值<br> 不对外暴露的接口为了性能,可能会有意去掉所有校验<br> 不要因为所谓“测试思维”,就在不了解的情况下为了测试而测试</p> <p>这种力气留到探索性测试和安全测试,自动化测试还是要讲求稳定和省事</p> <p>此外</p> <p>为了能匹配正常和异常情况(和具体哪一种异常情况),断言必须写得比平时复杂<br> 然后你会希望把断言条件也写进数据文件里,一种格式,eval后到处通用<br> 然后数据文件的格式会变得远比上面的示例复杂<br> 然后你会准备一键生成模板的脚本,批量修改的脚本,封装Newman的脚本,一个框架的雏形……别问我怎么知道的<br> 然后你回过头发现,一开始不用数据文件不就省事多了?!</p> <hr> <h4 id="%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0%20%E3%80%90%E4%B8%8B%E9%9D%A2%E6%98%AF%E6%88%91%E6%95%B4%E7%90%86%E7%9A%842023%E5%B9%B4%E6%9C%80%E5%85%A8%E7%9A%84%E8%BD%AF%E4%BB%B6%E6%B5%8B%E8%AF%95%E5%B7%A5%E7%A8%8B%E5%B8%88%E5%AD%A6%E4%B9%A0%E7%9F%A5%E8%AF%86%E6%9E%B6%E6%9E%84%E4%BD%93%E7%B3%BB%E5%9B%BE%E3%80%91"><strong>              【下面是我整理的2023年最全的软件测试工程师学习知识架构体系图】</strong></h4> <hr> <h3 id="%E4%B8%80%E3%80%81Python%E7%BC%96%E7%A8%8B%E5%85%A5%E9%97%A8%E5%88%B0%E7%B2%BE%E9%80%9A"><strong>一、Python编程入门到精通</strong></h3> <h3 id="%E2%80%8B%E7%BC%96%E8%BE%91%E4%BA%8C%E3%80%81%E6%8E%A5%E5%8F%A3%E8%87%AA%E5%8A%A8%E5%8C%96%E9%A1%B9%E7%9B%AE%E5%AE%9E%E6%88%98"><img alt="" height="0" src="http://img.e-com-net.com/image/info8/b7b4741b731d422089ba7d53bba4454c.jpg" width="0"><strong>二、接口自动化项目实战</strong></h3> <h3 id="%E2%80%8B%E7%BC%96%E8%BE%91"><img alt="" height="0" src="http://img.e-com-net.com/image/info8/fcedf677237443979a2622ef5be65f69.jpg" width="0"></h3> <h3 id="%E4%B8%89%E3%80%81Web%E8%87%AA%E5%8A%A8%E5%8C%96%E9%A1%B9%E7%9B%AE%E5%AE%9E%E6%88%98"><strong>三、Web自动化项目实战</strong></h3> <h3 id="%E2%80%8B%E7%BC%96%E8%BE%91%E5%9B%9B%E3%80%81App%E8%87%AA%E5%8A%A8%E5%8C%96%E9%A1%B9%E7%9B%AE%E5%AE%9E%E6%88%98"><img alt="" height="0" src="http://img.e-com-net.com/image/info8/9b61af9579b04861a2162e79beae9ce4.jpg" width="0"><br><strong>四、App自动化项目实战</strong></h3> <h3><img alt="" height="0" src="http://img.e-com-net.com/image/info8/57b89e8ee9d3499c80432e4919d10bae.jpg" width="0"></h3> <h3 id="%E4%BA%94%E3%80%81%E4%B8%80%E7%BA%BF%E5%A4%A7%E5%8E%82%E7%AE%80%E5%8E%86"><strong>五、一线大厂简历</strong></h3> <h3 id="%E2%80%8B%E7%BC%96%E8%BE%91%E5%85%AD%E3%80%81%E6%B5%8B%E8%AF%95%E5%BC%80%E5%8F%91DevOps%E4%BD%93%E7%B3%BB"><img alt="" height="0" src="http://img.e-com-net.com/image/info8/1b3204fb48cf4089b2cd8008c0ff58fd.jpg" width="0"><br><strong>六、测试开发DevOps体系</strong></h3> <h3><img alt="" height="0" src="http://img.e-com-net.com/image/info8/d7fd5840546c45d6ba0f147df8424307.jpg" width="0"></h3> <h3 id="%E4%B8%83%E3%80%81%E5%B8%B8%E7%94%A8%E8%87%AA%E5%8A%A8%E5%8C%96%E6%B5%8B%E8%AF%95%E5%B7%A5%E5%85%B7"><strong>七、常用自动化测试工具</strong></h3> <h3 id="%E2%80%8B%E7%BC%96%E8%BE%91%E5%85%AB%E3%80%81JMeter%E6%80%A7%E8%83%BD%E6%B5%8B%E8%AF%95"><img alt="" height="0" src="http://img.e-com-net.com/image/info8/0a7a776a879449f3823649b9a7658773.jpg" width="0"><br><strong>八、JMeter性能测试</strong></h3> <h3><img alt="" height="0" src="http://img.e-com-net.com/image/info8/02f63046311249a487434c022dfba839.jpg" width="0"></h3> <h3 id="%E4%B9%9D%E3%80%81%E6%80%BB%E7%BB%93%EF%BC%88%E5%B0%BE%E9%83%A8%E5%B0%8F%E6%83%8A%E5%96%9C%EF%BC%89"><strong>九、总结(尾部小惊喜)</strong></h3> <p>生命不息,奋斗不止。每一份努力都不会被辜负,只要坚持不懈,终究会有回报。珍惜时间,追求梦想。不忘初心,砥砺前行。你的未来,由你掌握!</p> <p>生命短暂,时间宝贵,我们无法预知未来会发生什么,但我们可以掌握当下。珍惜每一天,努力奋斗,让自己变得更加强大和优秀。坚定信念,执着追求,成功终将属于你!</p> <p>只有不断地挑战自己,才能不断地超越自己。坚持追求梦想,勇敢前行,你就会发现奋斗的过程是如此美好而值得。相信自己,你一定可以做到!</p> <p><strong>最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:</strong></p> <p><img alt="" height="0" src="http://img.e-com-net.com/image/info8/e295378717154e54bce8021704cc36c1.jpg" width="0"></p> <p>这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!</p> <p class="img-center"><img alt="" height="0" src="http://img.e-com-net.com/image/info8/cc3505134b4644c8b1c0b063f6d45df1.jpg" width="0"></p> </div> </div> </div> </div> </div> <!--PC和WAP自适应版--> <div id="SOHUCS" sid="1735636310061801472"></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">你可能感兴趣的:(软件测试,软件测试工程师,自动化测试,postman,lua,测试工具,功能测试,软件测试,自动化测试,程序人生)</h4> <div id="paradigm-article-related"> <div class="recommend-post mb30"> <ul class="widget-links"> <li><a href="/article/1950207097023033344.htm" title="Pktgen-DPDK:开源网络测试工具的深度解析与应用" target="_blank">Pktgen-DPDK:开源网络测试工具的深度解析与应用</a> <span class="text-muted">艾古力斯</span> <div>本文还有配套的精品资源,点击获取简介:Pktgen-DPDK是基于DPDK的高性能流量生成工具,适用于网络性能测试、硬件验证及协议栈开发。它支持多种网络协议,能够模拟高吞吐量的数据包发送。本项目通过利用DPDK的高速数据包处理能力,允许用户自定义数据包内容,并实现高效的数据包管理与传输。文章将指导如何安装DPDK、编译Pktgen、配置工具以及使用方法,最终帮助开发者和网络管理员深入理解并优化网络</div> </li> <li><a href="/article/1950144316261330944.htm" title="零基础学习性能测试第八章:高并发-redis缓存架构介绍" target="_blank">零基础学习性能测试第八章:高并发-redis缓存架构介绍</a> <span class="text-muted">试着</span> <a class="tag" taget="_blank" href="/search/%E6%80%A7%E8%83%BD%E6%B5%8B%E8%AF%95/1.htm">性能测试</a><a class="tag" taget="_blank" href="/search/%E7%BC%93%E5%AD%98/1.htm">缓存</a><a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0/1.htm">学习</a><a class="tag" taget="_blank" href="/search/redis/1.htm">redis</a><a class="tag" taget="_blank" href="/search/%E6%80%A7%E8%83%BD%E6%B5%8B%E8%AF%95/1.htm">性能测试</a><a class="tag" taget="_blank" href="/search/%E9%9B%B6%E5%9F%BA%E7%A1%80/1.htm">零基础</a> <div>目录一、Redis在高并发中的核心价值二、Redis核心架构模式▶1.缓存穿透防御架构▶2.热点数据多级缓存三、Redis集群高可用方案▶1.RedisCluster分片架构▶2.读写分离方案四、Redis性能压测实战▶1.基准测试工具▶2.关键性能指标五、典型瓶颈分析与优化案例1:缓存雪崩案例2:热Key阻塞六、电商秒杀实战架构七、必须掌握的进阶技巧八、学习路径与工具推荐以下是为零基础学习者设计</div> </li> <li><a href="/article/1950141285335625728.htm" title="【测试用例】银行借款业务" target="_blank">【测试用例】银行借款业务</a> <span class="text-muted"></span> <div>一、功能测试:借款申请流程:验证用户能够按照正常流程完成借款申请,包括填写借款金额、选择借款期限、提交必要的申请材料等步骤。验证系统能够正确处理用户提交的借款申请,包括申请信息的完整性和准确性检查。借款额度与期限:验证系统能够根据用户的信用评级和借款政策,正确计算并显示用户的可借款额度和期限范围。测试用户选择不同的借款额度和期限时,系统能否正确计算相关费用和还款计划。利率和费用计算:验证系统能够正</div> </li> <li><a href="/article/1950141285767639040.htm" title="【测试用例】银行授信业务" target="_blank">【测试用例】银行授信业务</a> <span class="text-muted">小邓在Working</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/%E6%B5%8B%E8%AF%95%E7%94%A8%E4%BE%8B/1.htm">测试用例</a><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/%E6%80%A7%E8%83%BD%E6%B5%8B%E8%AF%95/1.htm">性能测试</a><a class="tag" taget="_blank" href="/search/%E5%AE%89%E5%85%A8%E6%B5%8B%E8%AF%95/1.htm">安全测试</a><a class="tag" taget="_blank" href="/search/%E4%BA%A4%E4%BA%92%E6%B5%8B%E8%AF%95/1.htm">交互测试</a><a class="tag" taget="_blank" href="/search/%E4%B8%80%E8%87%B4%E6%80%A7%E6%B5%8B%E8%AF%95/1.htm">一致性测试</a> <div>一、功能测试:授信申请流程:验证客户能正常提交授信申请,并检查信息完整性和准确性。测试申请被拒绝或需要额外信息时的系统反馈。反欺诈与风控系统集成:验证系统能调用反欺诈接口并正确处理返回结果。测试系统调用风控接口获取授信建议和额度管理决策。用户信息校验与九要素验证:验证系统对客户提供的九要素信息进行准确性和一致性校验。测试校验失败时的错误提示和处理逻辑。重复授信检查与处理:验证系统能识别并处理重复授</div> </li> <li><a href="/article/1950141284907806720.htm" title="【测试用例】银行还款业务" target="_blank">【测试用例】银行还款业务</a> <span class="text-muted"></span> <div>一、功能测试:正常还款流程:选择还款账户、输入还款金额、确认还款信息。验证还款账户余额是否足够。验证还款成功后,账户余额、应还金额和还款状态是否更新。逾期还款:验证逾期罚息计算是否正确。验证逾期后的还款流程是否与正常还款有所不同。验证逾期还款后,账户状态和还款记录是否更新。不同还款账户:使用多个不同的还款账户进行还款。验证还款账户变更时,系统能否正确处理。余额不足还款:尝试还款金额大于账户余额的情</div> </li> <li><a href="/article/1950133970091962368.htm" title="还款流程设计测试用例" target="_blank">还款流程设计测试用例</a> <span class="text-muted">lifewange</span> <a class="tag" taget="_blank" href="/search/%E6%B5%8B%E8%AF%95%E7%94%A8%E4%BE%8B/1.htm">测试用例</a> <div>设计还款流程的测试用例时,需覆盖正常还款、异常还款、部分还款、提前还款、逾期还款等场景,并验证系统处理、账务核对、通知提醒、风控拦截等功能。以下是详细的测试用例设计思路和示例:一、核心测试维度测试类型关键验证点功能测试还款金额计算、账务更新、状态变更、通知触发异常测试失败还款(余额不足、账户异常)、重复还款、非法操作合规测试利息/违约金计算是否符合监管要求(如年化利率上限)性能测试批量还款时系统并</div> </li> <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/1950090986277367808.htm" title="软件测试的分类" target="_blank">软件测试的分类</a> <span class="text-muted"></span> <div>测试阶段划分冒烟测试:在正式开始测试之前,我们会对测试版本进行冒烟测试,如果测试版本的主流程可以通过没有被阻塞或者出现宕机等重大问题就可以进行正式的测试工作了单元测试:最微小规模的测试,测试对象是某个功能或代码,一般是由程序员来做集成测试:是指一个应用系统的内部的各个部件的联合测试,以决定他们是否能在一起共同工作且没有冲突部件可以是代码块、独立的应用、网络上的客户端或服务器程序一般来说接口测试属于</div> </li> <li><a href="/article/1950082491855466496.htm" title="【分享】软件测试(功能、接口、性能、自动化)详解" target="_blank">【分享】软件测试(功能、接口、性能、自动化)详解</a> <span class="text-muted">南瓜_c889</span> <div>一、软件测试功能测试测试用例编写是软件测试的基本技能;也有很多人认为测试用例是软件测试的核心;软件测试中最重要的是设计和生成有效的测试用例;测试用例是测试工作的指导,是软件测试的必须遵守的准则。黑盒测试常见测试用例编写方法1、等价类选取少数有代表性的数据,这一类数据等价于这一类的其它值;找出最小的子集,可以发现最多的错误;特性:必须设计的用例;涵盖了大部分情况;2、边界值所谓边界条件,是指输入和输</div> </li> <li><a href="/article/1950023029220241408.htm" title="代码审计与web安全选择题1" target="_blank">代码审计与web安全选择题1</a> <span class="text-muted">m0_74726609</span> <a class="tag" taget="_blank" href="/search/%E4%BB%A3%E7%A0%81%E5%AE%A1%E8%AE%A1/1.htm">代码审计</a><a class="tag" taget="_blank" href="/search/%E7%BD%91%E7%BB%9C%E5%AE%89%E5%85%A8/1.htm">网络安全</a> <div>软件供应链安全的基础是()A.完善的需求分析B.源代码安全C.渗透测试D.软件测试参考答案:B保证源代码安全的主要措施包括()A.开发工具和环境的安全B.代码安全C.渗透测试D.代码审计E.软件的说明文档完整参考答案:ABCD通过()技术,实现源代码在终端、网络及服务器存储场景下全周期的安全管理,防止内部代码有意、无意泄露、扩散出去。A.数据加B.数据脱C.数据安全隔离D.防火墙参考答案:C软件供</div> </li> <li><a href="/article/1949984251432726528.htm" title="七年软件测试历程,回过头来,最能帮助我的还是这些....." target="_blank">七年软件测试历程,回过头来,最能帮助我的还是这些.....</a> <span class="text-muted">爱码小士</span> <div>改革开发四十周年,技术更新也是日新月异,发展迅速。软件测试行业也如此。现在人工智能测试挺火的,但是谈到软件测试,人脑还是最好的测试工具。当我们测试软件时,我们处理信息,解决问题,做出决策并创造新的想法。这些并不是AI测试能轻易替代的。作为测试人员,我们必须了解不同的思维类型,以便我们可以将它们与不同的情境联系起来。例如,当我们查看设计图时,我们需要进行分析。当我们想到场景时,我们需要以抽象的方式思</div> </li> <li><a href="/article/1949974476556922880.htm" title="【链路追踪】" target="_blank">【链路追踪】</a> <span class="text-muted">WIN赢</span> <a class="tag" taget="_blank" href="/search/%E9%9D%A2%E8%AF%95%E4%B8%93%E6%A0%8F/1.htm">面试专栏</a><a class="tag" taget="_blank" href="/search/%E6%80%A7%E8%83%BD%E4%BC%98%E5%8C%96/1.htm">性能优化</a><a class="tag" taget="_blank" href="/search/%E8%87%AA%E5%8A%A8%E5%8C%96/1.htm">自动化</a> <div>一、什么是链路追踪链路追踪(Tracing)是一种用于分布式系统中跟踪请求处理过程的技术。它通过记录一次请求在多个服务之间的流转路径、耗时、状态等信息,帮助开发人员快速定位问题、分析性能瓶颈,并理解系统中各组件的交互关系。链路追踪不仅是一种强大的监控手段,也是测试人员在分布式系统中不可或缺的测试工具。它能够帮助测试人员快速定位问题、分析性能瓶颈,并优化系统性能,从而提高测试效率和质量二、核心概念T</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/1949863130796453888.htm" title="Rouge:面向摘要自动评估的召回导向型指标——原理、演进与应用全景" target="_blank">Rouge:面向摘要自动评估的召回导向型指标——原理、演进与应用全景</a> <span class="text-muted">大千AI助手</span> <a class="tag" taget="_blank" href="/search/%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0/1.htm">深度学习</a><a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a><a class="tag" taget="_blank" href="/search/%E7%A5%9E%E7%BB%8F%E7%BD%91%E7%BB%9C/1.htm">神经网络</a><a class="tag" taget="_blank" href="/search/Rouge/1.htm">Rouge</a><a class="tag" taget="_blank" href="/search/%E6%96%87%E6%9C%AC%E6%91%98%E8%A6%81/1.htm">文本摘要</a><a class="tag" taget="_blank" href="/search/Summary/1.htm">Summary</a><a class="tag" taget="_blank" href="/search/%E8%AF%84%E4%BC%B0/1.htm">评估</a> <div>“以n-gram重叠量化文本生成质量,为摘要评估提供可计算标尺”Rouge(Recall-OrientedUnderstudyforGistingEvaluation)是由南加州大学信息科学研究所(ISI)的Chin-YewLin于2004年提出的自动文本摘要评估指标,其核心思想是通过计算生成文本与参考摘要之间的n-gram重叠率,量化摘要的内容覆盖度与忠实度。作为自然语言处理(NLP)领域最权威</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/1949754447370448896.htm" title="谷歌官网app适配Android 15的官方指南" target="_blank">谷歌官网app适配Android 15的官方指南</a> <span class="text-muted"></span> <div>deepseek回答:谷歌官网提供了完整的Android15应用适配官方指南,涵盖兼容性测试工具、API迁移规范及商店审核要求,核心内容如下:一、官方适配指南入口访问Android15开发者网站核心内容:功能解读、API变更、安全策略及适配工具说明关键资源:适配工具链(兼容性框架、ADB调试)GSI系统映像下载虚拟设备配置教程⚙️二、适配工具链兼容性框架工具支持在不修改targetSdkVersi</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/1949727463550545920.htm" title="三面华为BD,根据录音整理的软件测试面试真题" target="_blank">三面华为BD,根据录音整理的软件测试面试真题</a> <span class="text-muted">杰克瑟</span> <a class="tag" taget="_blank" href="/search/%E9%9D%A2%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/%E5%8E%8B%E5%8A%9B%E6%B5%8B%E8%AF%95/1.htm">压力测试</a> <div>1、自我介绍2、离职原因3、公司人员组成4、在工作中你认为自己是强势的人还是随和的人5、了解公司6、接受加班吗7、软件测试流程8、上线验收是谁验收9、Linux命令10、MySQL数据库11、编写测试用例会用到哪些方法12、怎样测试一个杯子/桌子/电梯13、开发不认为是缺陷,该怎么办14、如何做接口测试15、web测试和app测试的区别16、xxx模块的测试用例是怎么设计17、monkey测试18</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/1949711201093087232.htm" title="使用vscode调试带-m参数的python代码" target="_blank">使用vscode调试带-m参数的python代码</a> <span class="text-muted">zaf赵</span> <a class="tag" taget="_blank" href="/search/vscode/1.htm">vscode</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/ide/1.htm">ide</a> <div>1.问题我在命令行运行的是pythonrender.py-mLangSplat/preprocessed_dataset/sofa/sofa--include_feature-lluage_features_1080p_dim3,但是在vscode中的普通调试,会报模块找不到的问题(原因是普通调试不会带-m参数,所以有些路径就会找不到)。因此,本文记录如何用vscode调试在命令行输入的如上Pyt</div> </li> <li><a href="/article/1949526492765548544.htm" title="lua协程 unity_XLua里使用协程" target="_blank">lua协程 unity_XLua里使用协程</a> <span class="text-muted">唱功大学</span> <a class="tag" taget="_blank" href="/search/lua%E5%8D%8F%E7%A8%8B/1.htm">lua协程</a><a class="tag" taget="_blank" href="/search/unity/1.htm">unity</a> <div>在XLua里如何使用协程?有两种方式使用Unity协程要想通过unity的StartCoroutine使用协程,需要传入IEnumerator参数Xlua提供了util.cs_generator来生成IEnumeratorutil是xlua的一个工具,require即可localutil=require'xlua.util'这样我们可以用StartCoroutine开启,StopCoroutine</div> </li> <li><a href="/article/1949511097887289344.htm" title="JMeter测试入门到实践:构建高性能应用的必备指南" target="_blank">JMeter测试入门到实践:构建高性能应用的必备指南</a> <span class="text-muted"></span> <div>在当今快速迭代的软件开发中,性能测试是确保应用稳定性和用户体验的关键环节。ApacheJMeter作为一款开源的性能测试工具,凭借其灵活性和强大的功能,成为开发者和测试工程师的首选工具之一。本文将从基础概念到实战技巧,带你全面掌握JMeter的使用方法。一、JMeter是什么?为什么选择它?JMeter是一款基于Java的开源工具,最初设计用于Web应用测试,现已扩展支持多种协议(HTTP、FTP</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/1949491675051126784.htm" title="lua的注释写法" target="_blank">lua的注释写法</a> <span class="text-muted">程序员乐逍遥</span> <a class="tag" taget="_blank" href="/search/Lua%E7%BC%96%E7%A8%8B/1.htm">Lua编程</a><a class="tag" taget="_blank" href="/search/lua/1.htm">lua</a><a class="tag" taget="_blank" href="/search/%E6%B3%A8%E9%87%8A/1.htm">注释</a> <div>lua中的注释不是//,/**/,而是标新立异的,--print("单行注释")---print("单行注释")--[[print("整段注释")print("整段注释")print("整段注释")]]--[=[print("整段注释,=号个数随意")print("整段注释,=号个数随意")print("整段注释,=号个数随意")--]=]---[[print("取消段注释,只需加个-")--]]</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/45.htm" title="安装数据库首次应用" target="_blank">安装数据库首次应用</a> <span class="text-muted">Array_06</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/oracle/1.htm">oracle</a><a class="tag" taget="_blank" href="/search/sql/1.htm">sql</a> <div>可是为什么再一次失败之后就变成直接跳过那个要求 enter full pathname of java.exe的界面 这个java.exe是你的Oracle 11g安装目录中例如:【F:\app\chen\product\11.2.0\dbhome_1\jdk\jre\bin】下的java.exe 。不是你的电脑安装的java jdk下的java.exe! 注意第一次,使用SQL D</div> </li> <li><a href="/article/172.htm" title="Weblogic Server Console密码修改和遗忘解决方法" target="_blank">Weblogic Server Console密码修改和遗忘解决方法</a> <span class="text-muted">bijian1013</span> <a class="tag" taget="_blank" href="/search/Welogic/1.htm">Welogic</a> <div>        在工作中一同事将Weblogic的console的密码忘记了,通过网上查询资料解决,实践整理了一下。 一.修改Console密码         打开weblogic控制台,安全领域 --> myrealm -->&n</div> </li> <li><a href="/article/299.htm" title="IllegalStateException: Cannot forward a response that is already committed" target="_blank">IllegalStateException: Cannot forward a response that is already committed</a> <span class="text-muted">Cwind</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/Servlets/1.htm">Servlets</a> <div>对于初学者来说,一个常见的误解是:当调用 forward() 或者 sendRedirect() 时控制流将会自动跳出原函数。标题所示错误通常是基于此误解而引起的。 示例代码: protected void doPost() { if (someCondition) { sendRedirect(); } forward(); // Thi</div> </li> <li><a href="/article/426.htm" title="基于流的装饰设计模式" target="_blank">基于流的装饰设计模式</a> <span class="text-muted">木zi_鸣</span> <a class="tag" taget="_blank" href="/search/%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F/1.htm">设计模式</a> <div>当想要对已有类的对象进行功能增强时,可以定义一个类,将已有对象传入,基于已有的功能,并提供加强功能。 自定义的类成为装饰类 模仿BufferedReader,对Reader进行包装,体现装饰设计模式 装饰类通常会通过构造方法接受被装饰的对象,并基于被装饰的对象功能,提供更强的功能。 装饰模式比继承灵活,避免继承臃肿,降低了类与类之间的关系 装饰类因为增强已有对象,具备的功能该</div> </li> <li><a href="/article/553.htm" title="Linux中的uniq命令" target="_blank">Linux中的uniq命令</a> <span class="text-muted">被触发</span> <a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a> <div>Linux命令uniq的作用是过滤重复部分显示文件内容,这个命令读取输入文件,并比较相邻的行。在正常情 况下,第二个及以后更多个重复行将被删去,行比较是根据所用字符集的排序序列进行的。该命令加工后的结果写到输出文件中。输入文件和输出文件必须不同。如 果输入文件用“- ”表示,则从标准输入读取。 AD: uniq [选项] 文件 说明:这个命令读取输入文件,并比较相邻的行。在正常情况下,第二个</div> </li> <li><a href="/article/680.htm" title="正则表达式Pattern" target="_blank">正则表达式Pattern</a> <span class="text-muted">肆无忌惮_</span> <a class="tag" taget="_blank" href="/search/Pattern/1.htm">Pattern</a> <div>正则表达式是符合一定规则的表达式,用来专门操作字符串,对字符创进行匹配,切割,替换,获取。   例如,我们需要对QQ号码格式进行检验 规则是长度6~12位  不能0开头  只能是数字,我们可以一位一位进行比较,利用parseLong进行判断,或者是用正则表达式来匹配[1-9][0-9]{4,14} 或者 [1-9]\d{4,14} &nbs</div> </li> <li><a href="/article/807.htm" title="Oracle高级查询之OVER (PARTITION BY ..)" target="_blank">Oracle高级查询之OVER (PARTITION BY ..)</a> <span class="text-muted">知了ing</span> <a class="tag" taget="_blank" href="/search/oracle/1.htm">oracle</a><a class="tag" taget="_blank" href="/search/sql/1.htm">sql</a> <div>一、rank()/dense_rank() over(partition by ...order by ...) 现在客户有这样一个需求,查询每个部门工资最高的雇员的信息,相信有一定oracle应用知识的同学都能写出下面的SQL语句: select e.ename, e.job, e.sal, e.deptno from scott.emp e, (se</div> </li> <li><a href="/article/934.htm" title="Python调试" target="_blank">Python调试</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/pdb/1.htm">pdb</a> <div>原文地址: http://blog.csdn.net/xuyuefei1988/article/details/19399137 1、下面网上收罗的资料初学者应该够用了,但对比IBM的Python 代码调试技巧: IBM:包括 pdb 模块、利用 PyDev 和 Eclipse 集成进行调试、PyCharm 以及 Debug 日志进行调试: http://www.ibm.com/d</div> </li> <li><a href="/article/1061.htm" title="webservice传递自定义对象时函数为空,以及boolean不对应的问题" target="_blank">webservice传递自定义对象时函数为空,以及boolean不对应的问题</a> <span class="text-muted">alleni123</span> <a class="tag" taget="_blank" href="/search/webservice/1.htm">webservice</a> <div>今天在客户端调用方法 NodeStatus status=iservice.getNodeStatus(). 结果NodeStatus的属性都是null。 进行debug之后,发现服务器端返回的确实是有值的对象。 后来发现原来是因为在客户端,NodeStatus的setter全部被我删除了。 本来是因为逻辑上不需要在客户端使用setter, 结果改了之后竟然不能获取带属性值的</div> </li> <li><a href="/article/1188.htm" title="java如何干掉指针,又如何巧妙的通过引用来操作指针————>说的就是java指针" target="_blank">java如何干掉指针,又如何巧妙的通过引用来操作指针————>说的就是java指针</a> <span class="text-muted">百合不是茶</span> <div>C语言的强大在于可以直接操作指针的地址,通过改变指针的地址指向来达到更改地址的目的,又是由于c语言的指针过于强大,初学者很难掌握, java的出现解决了c,c++中指针的问题 java将指针封装在底层,开发人员是不能够去操作指针的地址,但是可以通过引用来间接的操作:   定义一个指针p来指向a的地址(&是地址符号):         </div> </li> <li><a href="/article/1315.htm" title="Eclipse打不开,提示“An error has occurred.See the log file ***/.log”" target="_blank">Eclipse打不开,提示“An error has occurred.See the log file ***/.log”</a> <span class="text-muted">bijian1013</span> <a class="tag" taget="_blank" href="/search/eclipse/1.htm">eclipse</a> <div>打开eclipse工作目录的\.metadata\.log文件,发现如下错误: !ENTRY org.eclipse.osgi 4 0 2012-09-10 09:28:57.139 !MESSAGE Application error !STACK 1 java.lang.NoClassDefFoundError: org/eclipse/core/resources/IContai</div> </li> <li><a href="/article/1442.htm" title="spring aop实例annotation方法实现" target="_blank">spring aop实例annotation方法实现</a> <span class="text-muted">bijian1013</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a><a class="tag" taget="_blank" href="/search/AOP/1.htm">AOP</a><a class="tag" taget="_blank" href="/search/annotation/1.htm">annotation</a> <div>        在spring aop实例中我们通过配置xml文件来实现AOP,这里学习使用annotation来实现,使用annotation其实就是指明具体的aspect,pointcut和advice。1.申明一个切面(用一个类来实现)在这个切面里,包括了advice和pointcut AdviceMethods.jav</div> </li> <li><a href="/article/1569.htm" title="[Velocity一]Velocity语法基础入门" target="_blank">[Velocity一]Velocity语法基础入门</a> <span class="text-muted">bit1129</span> <a class="tag" taget="_blank" href="/search/velocity/1.htm">velocity</a> <div>用户和开发人员参考文档 http://velocity.apache.org/engine/releases/velocity-1.7/developer-guide.html   注释 1.行级注释## 2.多行注释#*  *#   变量定义 使用$开头的字符串是变量定义,例如$var1, $var2,   赋值 使用#set为变量赋值,例</div> </li> <li><a href="/article/1696.htm" title="【Kafka十一】关于Kafka的副本管理" target="_blank">【Kafka十一】关于Kafka的副本管理</a> <span class="text-muted">bit1129</span> <a class="tag" taget="_blank" href="/search/kafka/1.htm">kafka</a> <div>1. 关于request.required.acks   request.required.acks控制者Producer写请求的什么时候可以确认写成功,默认是0, 0表示即不进行确认即返回。 1表示Leader写成功即返回,此时还没有进行写数据同步到其它Follower Partition中 -1表示根据指定的最少Partition确认后才返回,这个在   Th</div> </li> <li><a href="/article/1823.htm" title="lua统计nginx内部变量数据" target="_blank">lua统计nginx内部变量数据</a> <span class="text-muted">ronin47</span> <a class="tag" taget="_blank" href="/search/lua+nginx%E3%80%80+%E7%BB%9F%E8%AE%A1/1.htm">lua nginx  统计</a> <div>server { listen 80; server_name photo.domain.com; location /{set $str $uri; content_by_lua ' local url = ngx.var.uri local res = ngx.location.capture(</div> </li> <li><a href="/article/1950.htm" title="java-11.二叉树中节点的最大距离" target="_blank">java-11.二叉树中节点的最大距离</a> <span class="text-muted">bylijinnan</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a> <div> import java.util.ArrayList; import java.util.List; public class MaxLenInBinTree { /* a. 1 / \ 2 3 / \ / \ 4 5 6 7 max=4 pass "root" </div> </li> <li><a href="/article/2077.htm" title="Netty源码学习-ReadTimeoutHandler" target="_blank">Netty源码学习-ReadTimeoutHandler</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> ReadTimeoutHandler的实现思路: 开启一个定时任务,如果在指定时间内没有接收到消息,则抛出ReadTimeoutException 这个异常的捕获,在开发中,交给跟在ReadTimeoutHandler后面的ChannelHandler,例如 private final ChannelHandler timeoutHandler = new ReadTim</div> </li> <li><a href="/article/2204.htm" title="jquery验证上传文件样式及大小(好用)" target="_blank">jquery验证上传文件样式及大小(好用)</a> <span class="text-muted">cngolon</span> <a class="tag" taget="_blank" href="/search/%E6%96%87%E4%BB%B6%E4%B8%8A%E4%BC%A0/1.htm">文件上传</a><a class="tag" taget="_blank" href="/search/jquery%E9%AA%8C%E8%AF%81/1.htm">jquery验证</a> <div><!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <script src="jquery1.8/jquery-1.8.0.</div> </li> <li><a href="/article/2331.htm" title="浏览器兼容【转】" target="_blank">浏览器兼容【转】</a> <span class="text-muted">cuishikuan</span> <a class="tag" taget="_blank" href="/search/css/1.htm">css</a><a class="tag" taget="_blank" href="/search/%E6%B5%8F%E8%A7%88%E5%99%A8/1.htm">浏览器</a><a class="tag" taget="_blank" href="/search/IE/1.htm">IE</a> <div>浏览器兼容问题一:不同浏览器的标签默认的外补丁和内补丁不同 问题症状:随便写几个标签,不加样式控制的情况下,各自的margin 和padding差异较大。 碰到频率:100% 解决方案:CSS里    *{margin:0;padding:0;} 备注:这个是最常见的也是最易解决的一个浏览器兼容性问题,几乎所有的CSS文件开头都会用通配符*来设</div> </li> <li><a href="/article/2458.htm" title="Shell特殊变量:Shell $0, $#, $*, $@, $?, $$和命令行参数" target="_blank">Shell特殊变量:Shell $0, $#, $*, $@, $?, $$和命令行参数</a> <span class="text-muted">daizj</span> <a class="tag" taget="_blank" href="/search/shell/1.htm">shell</a><a class="tag" taget="_blank" href="/search/%24%23/1.htm">$#</a><a class="tag" taget="_blank" href="/search/%24%3F/1.htm">$?</a><a class="tag" taget="_blank" href="/search/%E7%89%B9%E6%AE%8A%E5%8F%98%E9%87%8F/1.htm">特殊变量</a> <div>前面已经讲到,变量名只能包含数字、字母和下划线,因为某些包含其他字符的变量有特殊含义,这样的变量被称为特殊变量。例如,$ 表示当前Shell进程的ID,即pid,看下面的代码: $echo $$ 运行结果 29949   特殊变量列表 变量 含义 $0 当前脚本的文件名 $n 传递给脚本或函数的参数。n 是一个数字,表示第几个参数。例如,第一个</div> </li> <li><a href="/article/2585.htm" title="程序设计KISS 原则-------KEEP IT SIMPLE, STUPID!" target="_blank">程序设计KISS 原则-------KEEP IT SIMPLE, STUPID!</a> <span class="text-muted">dcj3sjt126com</span> <a class="tag" taget="_blank" href="/search/unix/1.htm">unix</a> <div>翻到一本书,讲到编程一般原则是kiss:Keep It Simple, Stupid.对这个原则深有体会,其实不仅编程如此,而且系统架构也是如此。 KEEP IT SIMPLE, STUPID! 编写只做一件事情,并且要做好的程序;编写可以在一起工作的程序,编写处理文本流的程序,因为这是通用的接口。这就是UNIX哲学.所有的哲学真 正的浓缩为一个铁一样的定律,高明的工程师的神圣的“KISS 原</div> </li> <li><a href="/article/2712.htm" title="android Activity间List传值" target="_blank">android Activity间List传值</a> <span class="text-muted">dcj3sjt126com</span> <a class="tag" taget="_blank" href="/search/Activity/1.htm">Activity</a> <div>第一个Activity: import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;import android.app.Activity;import android.content.Intent;import android.os.Bundle;import a</div> </li> <li><a href="/article/2839.htm" title="tomcat 设置java虚拟机内存" target="_blank">tomcat 设置java虚拟机内存</a> <span class="text-muted">eksliang</span> <a class="tag" taget="_blank" href="/search/tomcat+%E5%86%85%E5%AD%98%E8%AE%BE%E7%BD%AE/1.htm">tomcat 内存设置</a> <div>转载请出自出处:http://eksliang.iteye.com/blog/2117772 http://eksliang.iteye.com/ 常见的内存溢出有以下两种: java.lang.OutOfMemoryError: PermGen space java.lang.OutOfMemoryError: Java heap space   ------------</div> </li> <li><a href="/article/2966.htm" title="Android 数据库事务处理" target="_blank">Android 数据库事务处理</a> <span class="text-muted">gqdy365</span> <a class="tag" taget="_blank" href="/search/android/1.htm">android</a> <div>使用SQLiteDatabase的beginTransaction()方法可以开启一个事务,程序执行到endTransaction() 方法时会检查事务的标志是否为成功,如果程序执行到endTransaction()之前调用了setTransactionSuccessful() 方法设置事务的标志为成功则提交事务,如果没有调用setTransactionSuccessful() 方法则回滚事务。事</div> </li> <li><a href="/article/3093.htm" title="Java 打开浏览器" target="_blank">Java 打开浏览器</a> <span class="text-muted">hw1287789687</span> <a class="tag" taget="_blank" href="/search/%E6%89%93%E5%BC%80%E7%BD%91%E5%9D%80/1.htm">打开网址</a><a class="tag" taget="_blank" href="/search/open%E6%B5%8F%E8%A7%88%E5%99%A8/1.htm">open浏览器</a><a class="tag" taget="_blank" href="/search/open+browser/1.htm">open browser</a><a class="tag" taget="_blank" href="/search/%E6%89%93%E5%BC%80url/1.htm">打开url</a><a class="tag" taget="_blank" href="/search/%E6%89%93%E5%BC%80%E6%B5%8F%E8%A7%88%E5%99%A8/1.htm">打开浏览器</a> <div>使用java 语言如何打开浏览器呢? 我们先研究下在cmd窗口中,如何打开网址 使用IE 打开 D:\software\bin>cmd /c start iexplore http://hw1287789687.iteye.com/blog/2153709 使用火狐打开 D:\software\bin>cmd /c start firefox http://hw1287789</div> </li> <li><a href="/article/3220.htm" title="ReplaceGoogleCDN:将 Google CDN 替换为国内的 Chrome 插件" target="_blank">ReplaceGoogleCDN:将 Google CDN 替换为国内的 Chrome 插件</a> <span class="text-muted">justjavac</span> <a class="tag" taget="_blank" href="/search/chrome/1.htm">chrome</a><a class="tag" taget="_blank" href="/search/Google/1.htm">Google</a><a class="tag" taget="_blank" href="/search/google+api/1.htm">google api</a><a class="tag" taget="_blank" href="/search/chrome%E6%8F%92%E4%BB%B6/1.htm">chrome插件</a> <div>Chrome Web Store 安装地址: https://chrome.google.com/webstore/detail/replace-google-cdn/kpampjmfiopfpkkepbllemkibefkiice 由于众所周知的原因,只需替换一个域名就可以继续使用Google提供的前端公共库了。 同样,通过script标记引用这些资源,让网站访问速度瞬间提速吧</div> </li> <li><a href="/article/3347.htm" title="进程VS.线程" target="_blank">进程VS.线程</a> <span class="text-muted">m635674608</span> <a class="tag" taget="_blank" href="/search/%E7%BA%BF%E7%A8%8B/1.htm">线程</a> <div>资料来源: http://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000/001397567993007df355a3394da48f0bf14960f0c78753f000 1、Apache最早就是采用多进程模式 2、IIS服务器默认采用多线程模式 3、多进程优缺点 优点: 多进程模式最大</div> </li> <li><a href="/article/3474.htm" title="Linux下安装MemCached" target="_blank">Linux下安装MemCached</a> <span class="text-muted">字符串</span> <a class="tag" taget="_blank" href="/search/memcached/1.htm">memcached</a> <div>前提准备:1. MemCached目前最新版本为:1.4.22,可以从官网下载到。2. MemCached依赖libevent,因此在安装MemCached之前需要先安装libevent。2.1 运行下面命令,查看系统是否已安装libevent。[root@SecurityCheck ~]# rpm -qa|grep libevent libevent-headers-1.4.13-4.el6.n</div> </li> <li><a href="/article/3601.htm" title="java设计模式之--jdk动态代理(实现aop编程)" target="_blank">java设计模式之--jdk动态代理(实现aop编程)</a> <span class="text-muted">Supanccy2013</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/DAO/1.htm">DAO</a><a class="tag" taget="_blank" href="/search/%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F/1.htm">设计模式</a><a class="tag" taget="_blank" href="/search/AOP/1.htm">AOP</a> <div>    与静态代理类对照的是动态代理类,动态代理类的字节码在程序运行时由Java反射机制动态生成,无需程序员手工编写它的源代码。动态代理类不仅简化了编程工作,而且提高了软件系统的可扩展性,因为Java 反射机制可以生成任意类型的动态代理类。java.lang.reflect 包中的Proxy类和InvocationHandler 接口提供了生成动态代理类的能力。 &</div> </li> <li><a href="/article/3728.htm" title="Spring 4.2新特性-对java8默认方法(default method)定义Bean的支持" target="_blank">Spring 4.2新特性-对java8默认方法(default method)定义Bean的支持</a> <span class="text-muted">wiselyman</span> <a class="tag" taget="_blank" href="/search/spring+4/1.htm">spring 4</a> <div>2.1 默认方法(default method) java8引入了一个default medthod; 用来扩展已有的接口,在对已有接口的使用不产生任何影响的情况下,添加扩展 使用default关键字 Spring 4.2支持加载在默认方法里声明的bean 2.2 将要被声明成bean的类 public class DemoService { </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>