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/1833372002421927936.htm" title="2024最新软件测试面试题(带答案)" target="_blank">2024最新软件测试面试题(带答案)</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%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/%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/%E8%BD%AF%E4%BB%B6%E6%B5%8B%E8%AF%95%E9%9D%A2%E8%AF%95/1.htm">软件测试面试</a> <div>1.请自我介绍一下(需简单清楚的表述自已的基本情况,在这过程中要展现出自信,对工作有激情,上进,好学)面试官您好,我叫###,今年26岁,来自江西九江,就读专业是电子商务,毕业后就来深圳工作,有三年的软件测试工程师的经验,我性格比较开朗,能和同事小伙伴友好相处。2.平时工作中是怎么去测的?(至少在这个问题中能说的出测试流程)首先根据客户需求文档提取功能模块,然后编写测试计划,提取测试点,设计测试用</div> </li> <li><a href="/article/1833371874910892032.htm" title="软件测试面试题(Python全栈自动化测试面试题)" target="_blank">软件测试面试题(Python全栈自动化测试面试题)</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/%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%E9%9D%A2%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/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/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%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> <div>1、你的测试职业发展是什么?测试经验越多,测试能力越高。所以我的职业发展是需要时间积累的,一步步向着高级测试工程师奔去。而且我也有初步的职业规划,前3年积累测试经验,按如何做好测试工程师的要点去要求自己,不断更新自己改正自己,做好测试任务。2、你认为测试人员需要具备哪些素质做测试应该要有一定的协调能力,因为测试人员经常要与开发接触处理一些问题,如果处理不好的话会引起一些冲突,这样的话工作上就会不好</div> </li> <li><a href="/article/1833371876026576896.htm" title="DDT数据驱动测试" target="_blank">DDT数据驱动测试</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/%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/%E8%BD%AF%E4%BB%B6%E6%B5%8B%E8%AF%95%E9%9D%A2%E8%AF%95/1.htm">软件测试面试</a> <div>简单介绍DDT(DateDriverTest),所谓数据驱动测试,简单来说就是由数据的改变从而驱动自动化测试的执行,最终引起测试结果的改变。通过使用数据驱动测试的方法,可以在需要验证多组数据测试场景中,使用外部数据源实现对输入输出与期望值的参数化,避免在测试中使用硬编码的数据,也就是测试数据和用例脚本代码分离。DDT它其实就是一个装饰器,它会根据你传递进来的数据来决定要生成几个测试用例。使用的意义</div> </li> <li><a href="/article/1833353977371127808.htm" title="python调用pyd文件_python的py文件生成pyd文件,pycharm直接调用pyd文件" target="_blank">python调用pyd文件_python的py文件生成pyd文件,pycharm直接调用pyd文件</a> <span class="text-muted">weixin_39799561</span> <a class="tag" taget="_blank" href="/search/python%E8%B0%83%E7%94%A8pyd%E6%96%87%E4%BB%B6/1.htm">python调用pyd文件</a> <div>这段时间做接口自动化测试,用python直接调用接口,sign值是经过系列复杂算法加密后生成的字符串,保密级别高,不能直接以py文件供大家调用~~pyc文件呢,很容易就被反编译了,pyd文件和一般dll类似,不容易被反编译。生成pyd很容易,网上百度一堆堆,但是调用pyd文件会遇到好多错误。在此贴一下生成pyd到调用pyd文件的方法供参考:1.新建一个setup.py文件:#用cpython生成p</div> </li> <li><a href="/article/1833339857762611200.htm" title="Java+selenium+chrome+linux/windows实现数据获取" target="_blank">Java+selenium+chrome+linux/windows实现数据获取</a> <span class="text-muted">fox_初始化</span> <a class="tag" taget="_blank" href="/search/Java/1.htm">Java</a><a class="tag" taget="_blank" href="/search/selenium/1.htm">selenium</a><a class="tag" taget="_blank" href="/search/chrome/1.htm">chrome</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/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/windows/1.htm">windows</a> <div>背景:在进行业务数据获取或者自动化测试时,通常会使用模拟chrome方式启动页面,然后获取页面的数据。在本地可以使用windows的chromedriver.exe进行打开chrome页面、点击等操作。在linux下通常使用无界面无弹窗的方式进行操作。接下来是实现方案。代码层面:关键工具类:ChromeDriverUtilpublicclassChromeDriverUtil{publicWebD</div> </li> <li><a href="/article/1833328394926911488.htm" title="python基础:10.面向对象之简介" target="_blank">python基础:10.面向对象之简介</a> <span class="text-muted">海阔and天空</span> <a class="tag" taget="_blank" href="/search/python%E5%85%A8%E6%A0%88%E8%87%AA%E5%8A%A8%E5%8C%96%E6%B5%8B%E8%AF%95/1.htm">python全栈自动化测试</a> <div>0.前言如果可以的话,请先关注(专栏和账号),然后点赞和收藏,最后学习和进步。你的支持是我继续写下去的最大动力,个人定当倾囊而送,不负所望。谢谢!!!1.前提基于win10专业版64位系统+64位jdk1.8+64位python3.6.5+社区版pycharm2018.1.3+unittest+selenium3.141.0。要学好自动化测试,我们先从python语言基础开始学习,一步一个脚印,欲</div> </li> <li><a href="/article/1833321962303221760.htm" title="python面向对象简介_python基础:10.面向对象之简介" target="_blank">python面向对象简介_python基础:10.面向对象之简介</a> <span class="text-muted">奋哥时代</span> <a class="tag" taget="_blank" href="/search/python%E9%9D%A2%E5%90%91%E5%AF%B9%E8%B1%A1%E7%AE%80%E4%BB%8B/1.htm">python面向对象简介</a> <div>0.前言如果可以的话,请先关注(专栏和账号),然后点赞和收藏,最后学习和进步。你的支持是我继续写下去的最大动力,个人定当倾囊而送,不负所望。谢谢!!!1.前提基于win10专业版64位系统+64位jdk1.8+64位python3.6.5+社区版pycharm2018.1.3+unittest+selenium3.141.0。要学好自动化测试,我们先从python语言基础开始学习,一步一个脚印,欲</div> </li> <li><a href="/article/1833311872183529472.htm" title="Python+Selenium+Pytest+POM自动化测试框架封装" target="_blank">Python+Selenium+Pytest+POM自动化测试框架封装</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/%E8%BD%AF%E4%BB%B6%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/pytest/1.htm">pytest</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/%E6%B5%8B%E8%AF%95%E5%B7%A5%E5%85%B7/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> <div>点击文末小卡片,免费获取软件测试全套资料,资料在手,涨薪更快1、测试框架简介1)测试框架的优点代码复用率高,如果不使用框架的话,代码会显得很冗余。可以组装日志、报告、邮件等一些高级功能。提高元素等数据的可维护性,元素发生变化时,只需要更新一下配置文件。使用更灵活的PageObject设计模式。2)测试框架的整体目录【注意】init.py文件用以标识此目录为一个python包。2、首先时间管理首先,</div> </li> <li><a href="/article/1833306582272798720.htm" title="Jmeter、Python、Postman测试工具对比" target="_blank">Jmeter、Python、Postman测试工具对比</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/%E6%B5%8B%E8%AF%95%E5%B7%A5%E5%85%B7/1.htm">测试工具</a><a class="tag" taget="_blank" href="/search/jmeter/1.htm">jmeter</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a> <div>一、JMeter总结:适合对代码不敏感的使用人员,不会代码也可以完成接口自动化,设计框架。适合紧急迭代的项目。JMeter接口测试的优势小巧轻量级,并且开源免费,社区接受度高,比较容易入门支持多协议,并提供了比较高级的扩展能力,允许自己定义和扩展新的协议支持,比如扩展支持阿里提供的Dubbo协议的JMeter插件等学习者不需要会代码,不需要编程,熟悉http请求,熟悉业务流程,就可以根据页面中in</div> </li> <li><a href="/article/1833290447716446208.htm" title="使用 Visual Studio 通过 .NET 测试 .NET 类库" target="_blank">使用 Visual Studio 通过 .NET 测试 .NET 类库</a> <span class="text-muted">51Aspx源码服务专家</span> <a class="tag" taget="_blank" href="/search/Visual/1.htm">Visual</a><a class="tag" taget="_blank" href="/search/Studio/1.htm">Studio</a><a class="tag" taget="_blank" href="/search/Visual/1.htm">Visual</a><a class="tag" taget="_blank" href="/search/Studio/1.htm">Studio</a><a class="tag" taget="_blank" href="/search/%E4%BA%91%E5%8E%9F%E7%94%9F%E5%BC%80%E5%8F%91%E6%8C%91%E6%88%98%E8%B5%9B/1.htm">云原生开发挑战赛</a><a class="tag" taget="_blank" href="/search/51Aspx/1.htm">51Aspx</a> <div>本教程演示如何通过将测试项目添加到解决方案来自动执行单元测试。先决条件本教程适用于在使用VisualStudio创建.NET类库源社区中创建的解决方案。创建单元测试项目单元测试在开发和发布期间提供自动化的软件测试。MSTest是可供选择的三个测试框架之一。其他两个是xUnit和nUnit。启动VisualStudio。打开在ClassLibraryProjects中创建的ClassLibraryP</div> </li> <li><a href="/article/1833271280661524480.htm" title="Macaca 面向多端的自动化测试工具基于Python搭建详解 --Android、IOS搭建步骤" target="_blank">Macaca 面向多端的自动化测试工具基于Python搭建详解 --Android、IOS搭建步骤</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/%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/android/1.htm">android</a><a class="tag" taget="_blank" href="/search/ios/1.htm">ios</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/macaca/1.htm">macaca</a> <div>Macaca是一套完整的自动化测试解决方案。同时支持多端Android、iOS、web、桌面浏览器运行,并且提供标准化的驱动层。多语言支持:支持node.js、Java、python。官方地址:https://macacajs.com/zh/这次选取Python作为开发语言主要是因为Python扩展能力强,便于开发。InstallMacacaonMac安装/更新node$node-v清理npm缓存</div> </li> <li><a href="/article/1833257537026224128.htm" title="利用PHP和Selenium自动化采集数据、实现爬虫抓取" target="_blank">利用PHP和Selenium自动化采集数据、实现爬虫抓取</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/selenium/1.htm">selenium</a><a class="tag" taget="_blank" href="/search/%E8%87%AA%E5%8A%A8%E5%8C%96/1.htm">自动化</a> <div>随着互联网时代的到来,抓取互联网上的数据成为越来越重要的工作。在web前端开发领域,我们经常需要获取页面中的数据来完成一系列的交互操作,为了提高效率,我们可以将这个工作自动化。本文将介绍如何利用PHP和Selenium进行自动化数据采集和爬虫抓取。一、什么是SeleniumSelenium是一个免费的开源自动化测试工具,主要用于自动化测试Web应用程序,可以模拟真实的用户行为,实现自动交互。使用S</div> </li> <li><a href="/article/1833218675574927360.htm" title="Swagger使用手册" target="_blank">Swagger使用手册</a> <span class="text-muted">纬一</span> <div>认识Swagger:Swagger是一个规范和完整的框架,用于生成、描述、调用和可视化RESTful风格的Web服务。总体目标是使客户端和文件系统作为服务器以同样的速度来更新。文件的方法,参数和模型紧密集成到服务器端的代码,允许API来始终保持同步。作用:1.接口的文档在线自动生成。2.功能测试。Swagger使用的注解及其说明:@Api:用在类上,说明该类的作用。@ApiOperation:注解</div> </li> <li><a href="/article/1833193693662769152.htm" title="Lua协同程序Coroutine" target="_blank">Lua协同程序Coroutine</a> <span class="text-muted">z2014z</span> <a class="tag" taget="_blank" href="/search/lua/1.htm">lua</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a> <div>Lua协同程序(Coroutine)定义Lua协同程序(Coroutine)与线程类似:拥有独立的堆栈、局部变量、指令指针,同时又与其它协同程序共享全局变量和其它大部分东西。协同程序可以理解为一种特殊的线程,可以暂停和恢复其执行,从而允许非抢占式的多任务处理。协同是非常强大的功能,但是用起来也很复杂。线程和协同程序区别主要区别在于,一个程序可以同时运行几个线程,而协同程序却需要彼此协作的运行。在任</div> </li> <li><a href="/article/1833185125026852864.htm" title="浅谈lua拷贝" target="_blank">浅谈lua拷贝</a> <span class="text-muted">coding·life</span> <a class="tag" taget="_blank" href="/search/Lua%E5%88%9D%E6%8E%A2/1.htm">Lua初探</a><a class="tag" taget="_blank" href="/search/lua%E6%8B%B7%E8%B4%9D/1.htm">lua拷贝</a><a class="tag" taget="_blank" href="/search/%E6%B7%B1%E6%8B%B7%E8%B4%9D/1.htm">深拷贝</a> <div>lua中对象的拷贝分为2种:浅拷贝(ShallowCopy)和深拷贝(DeepCopy)。浅拷贝简单来说只是对一些基本的类型进行复制,而像table这样的类型则直接引用。目前对于浅拷贝有2种说法:1.赋值操作符"="即是浅拷贝2.使用代码实现浅拷贝,代码如下:functionshallow_copy(object)localnewObjectiftype(object)=="table"thenn</div> </li> <li><a href="/article/1833172141248442368.htm" title="lua中的引用与拷贝" target="_blank">lua中的引用与拷贝</a> <span class="text-muted">「已注销」</span> <a class="tag" taget="_blank" href="/search/lua/1.htm">lua</a><a class="tag" taget="_blank" href="/search/%E6%B7%B1%E6%8B%B7%E8%B4%9D/1.htm">深拷贝</a><a class="tag" taget="_blank" href="/search/%E5%BC%95%E7%94%A8/1.htm">引用</a> <div>Lua中的基本类型是值传递,只有表是引用传递-----------------例子一x=1y=xy=10print(x)--输出:1-----------------例子二functionchange(x)x=10endy=1change(y)print(y)--输出:1-----------------例子三x="test"y=xx="show"print(y)--输出:test--------</div> </li> <li><a href="/article/1833171511054266368.htm" title="lua的深拷贝和浅拷贝" target="_blank">lua的深拷贝和浅拷贝</a> <span class="text-muted">一起去放牛</span> <a class="tag" taget="_blank" href="/search/lua/1.htm">lua</a><a class="tag" taget="_blank" href="/search/junit/1.htm">junit</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a> <div>浅拷贝:这种就是直接把内存地址给了shadow_copy,两个表共享内存,改shadow_copy和orig都会改变表orig的值。深拷贝:这种是递归复制表元素,两个表相互独立不受影响。深拷贝的代码就是另开了个数组,把orig的值穿进去这是跟值类型和引用类型的原理比较相似--原表localorig={name="John",age=30,languages={"Java","Python"}}--</div> </li> <li><a href="/article/1833168110291611648.htm" title="Lua 拷贝" target="_blank">Lua 拷贝</a> <span class="text-muted">z2014z</span> <a class="tag" taget="_blank" href="/search/lua/1.htm">lua</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a> <div>Lua拷贝主要分为两类:浅拷贝、深拷贝浅拷贝使用赋值运算符=,就是浅拷贝,有两种情况1.拷贝对象是基本的值类型,如string、number、boolean等,赋值时,会创建一个新对象,修改拷贝的值不会影响原来的值2.拷贝的对象是table时,相当于直接进行引用,指向同一个内存地址,修改新对象的值会影响原来的值深拷贝由于Lua没有提供api,需要封装函数,通过递归遍历table拷贝对应数据func</div> </li> <li><a href="/article/1833053265667911680.htm" title="python前端开发基础" target="_blank">python前端开发基础</a> <span class="text-muted">GRKF15</span> <a class="tag" taget="_blank" href="/search/python-%E5%89%8D%E7%AB%AF/1.htm">python-前端</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a> <div>1.Python前端基础教程概述Python作为一门多用途的编程语言,近年来在前端开发领域也展现出了其独特的优势。以下是对Python前端基础教程的概述,包括主要概念、工具和实践方法。1.1Python在前端开发中的应用Python在前端开发中的应用主要体现在以下几个方面:自动化测试:使用Python编写自动化测试脚本,提高测试效率。Web开发框架:利用Flask和Django等框架快速搭建Web</div> </li> <li><a href="/article/1832958588935565312.htm" title="Postman接口测试,从入门到实战(一)" target="_blank">Postman接口测试,从入门到实战(一)</a> <span class="text-muted">追忆袍泽</span> <a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/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%87%AA%E5%8A%A8%E5%8C%96%E6%B5%8B%E8%AF%95/1.htm">自动化测试</a><a class="tag" taget="_blank" href="/search/postman/1.htm">postman</a><a class="tag" taget="_blank" href="/search/%E6%B5%8B%E8%AF%95%E5%B7%A5%E5%85%B7/1.htm">测试工具</a> <div>一、什么是接口测试?接口测试分为两种:测试外部接口:系统和外部系统之间的接口。如:电商网站:支付宝支付。测试内部接口:系统内部的模块之间的联调,或者子系统之间的数据交互。测试重点:测试接口参数传递的正确性,接口功能的正确性,输出结果的正确性,以及对各种异常情况的容错性和权限控制。接口测试过程?比如我们出去吃饭,餐饮服务接口请求过程:饭馆地址(接口地址)选择菜系:东北菜、四川菜、湖南菜(接口请求方式</div> </li> <li><a href="/article/1832950896783355904.htm" title="F12导入接口信息至postman/apifox" target="_blank">F12导入接口信息至postman/apifox</a> <span class="text-muted">星光不负赶路人!</span> <a class="tag" taget="_blank" href="/search/postman/1.htm">postman</a> <div>解决问题:无法快速获取接口参数信息1.复制为CURL2.import导入postman,点击send请求,请求成功2.import导入apifox,点击send请求,请求成功</div> </li> <li><a href="/article/1832848654860382208.htm" title="QMetry自动化框架:一站式功能测试解决方案" target="_blank">QMetry自动化框架:一站式功能测试解决方案</a> <span class="text-muted">芮奕滢Kirby</span> <div>QMetry自动化框架:一站式功能测试解决方案qafQualityAutomationFrameworkforweb,mobileweb,mobilenativeandrestweb-serviceusingSelenium,webdrier,TestNGandJavaJersey项目地址:https://gitcode.com/gh_mirrors/qa/qaf项目介绍QMetry自动化框架(Q</div> </li> <li><a href="/article/1832834152056057856.htm" title="Python 处理config.ini文件" target="_blank">Python 处理config.ini文件</a> <span class="text-muted">web521_wu</span> <a class="tag" taget="_blank" href="/search/Python/1.htm">Python</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a> <div>在做一个自动化测试框架中需要根据不同设备修改IP、username、password等信息,开始使用excel,单使用下来发现excel较死板,不方便后续维护。且功能自动化只针对单台设备,后续需要在UI上实现。确定使用config文件,放在程序中,使用时UI直接修改即可。先了解ini文件的格式[common]-----sectionip_addr=192.168.25.71------option</div> </li> <li><a href="/article/1832829736326361088.htm" title="【车载智能座舱域控制器】-【测试】" target="_blank">【车载智能座舱域控制器】-【测试】</a> <span class="text-muted">@逝水流年轻染尘@</span> <a class="tag" taget="_blank" href="/search/%E6%B5%8B%E8%AF%95%E5%B7%A5%E5%85%B7/1.htm">测试工具</a> <div>目录一、座舱SOC芯片历程介绍1、注解:1.CPU(中央处理器)2.GPU(图形处理器)3.NPU(神经处理单元)2、具体应用示例3、性能指标的重要性二、智能座舱包含哪些功能三、智能座舱测试包括:四、智能座舱HIL测试系统1、智能数字座舱HIL自动化测试系统框图如下:编辑2、智能座舱HIL测试系统架构2.1测试范围:2.2系统亮点:一、座舱SOC芯片历程介绍座舱域控制器用的主控SoC芯片,大家第一</div> </li> <li><a href="/article/1832820072641556480.htm" title="2022年转行学软件测试还有前景吗?最真实的数据告诉你答案!" target="_blank">2022年转行学软件测试还有前景吗?最真实的数据告诉你答案!</a> <span class="text-muted">白码会说</span> <div>“软件测试真的已经饱和了吗?”、“软件测试的前景究竟怎么样?”这两个问题是笔者从业至今被询问过最多的两个问题,但因为行业始终在发展中,所以这些问题没有固定的答案,需要根据当下的实际情况来得到答案。随着不断有转行人员及毕业的大学生进入IT行业,在很多外界人眼里,这个行业的“缺口”已满,人员趋于饱和,但事实真的还是这样吗?本期,笔者就带着最新的数据和大家一起探究软件测试行业的前景究竟如何?1、软件测试</div> </li> <li><a href="/article/1832776414848446464.htm" title="[rk3588 ubuntu20.04]移植ROS2" target="_blank">[rk3588 ubuntu20.04]移植ROS2</a> <span class="text-muted">嵌入式成长家</span> <a class="tag" taget="_blank" href="/search/linux%E5%86%85%E6%A0%B8%E7%9A%84%E7%B3%BB%E7%BB%9F%E5%AE%9E%E6%88%98/1.htm">linux内核的系统实战</a><a class="tag" taget="_blank" href="/search/ubuntu/1.htm">ubuntu</a><a class="tag" taget="_blank" href="/search/ROS2/1.htm">ROS2</a><a class="tag" taget="_blank" href="/search/ROS2%E7%A7%BB%E6%A4%8D/1.htm">ROS2移植</a> <div>目录1使用命令行安装ROS21.1设置语言1.2添加源1.3安装ROS21.4设置环境变量2在编译源码阶段安装ROS22.1调整roofts.img大小2.2安装ROS23ROS2功能测试1使用命令行安装ROS21.1设置语言设置语言为UTF-8。sudoaptupdate&&sudoaptinstalllocalessudolocale-genen_USen_US.UTF-8sudoupdate</div> </li> <li><a href="/article/1832751729754599424.htm" title="移动端测试知识概览" target="_blank">移动端测试知识概览</a> <span class="text-muted">384bdb547ea6</span> <div>一、移动端测试是什么1、移动端测试是指对移动应用进行的测试,即实体的特性满足需求的程度二、移动端测试分类1、APP功能测试:(1)业务逻辑正确性测试:依据产品文档设计测试用例,加上隐性需求用例(2)兼容性测试:系统版本、屏幕分辨率、网络状态(3)异常测试:热启动应用:应用由后台转换为前台的过程、网络切换和中断恢复、电话和信息中断恢复(4)升级安装卸载测试:升级:临近版本升级、跨版本升级、保证升级后</div> </li> <li><a href="/article/1832741877410000896.htm" title="python数学库 目录库相关" target="_blank">python数学库 目录库相关</a> <span class="text-muted">yanghy228</span> <div>数学相关的库math:数学相关的库random:随机库软件测试、密码学当中经常使用有限定条件的随机数randint(1,5)randchoice(["aa",'bb','cc'])文件和目录访问相关的库linux命令行:ls查看文件名ls-lpwd查看当前所在位置cd绝对路径(/)相对路径(..)(./一般省略)建立文件夹:mkdir(-p多层建立)删除文件夹:rmdir包括文件的话(rm-rf)</div> </li> <li><a href="/article/1832539655048884224.htm" title="【软件测试】UAT、PAT、FAT、SIT测试简介" target="_blank">【软件测试】UAT、PAT、FAT、SIT测试简介</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/%E6%B5%8B%E8%AF%95%E5%B7%A5%E5%85%B7/1.htm">测试工具</a> <div>UAT、PAT、FAT、和SIT测试是软件测试领域中常见的术语,分别代表不同类型的测试过程。它们的全称和含义如下:UAT(UserAcceptanceTesting):用户接受测试。这是软件开发过程中的最后阶段,由最终用户进行,以确保软件满足他们的需求并且能够在实际环境中正常工作。PAT(ProductionAcceptanceTesting):生产接受测试。这是在软件部署到生产环境之前进行的测试</div> </li> <li><a href="/article/1832488979409235968.htm" title="软件测试单元测试题库" target="_blank">软件测试单元测试题库</a> <span class="text-muted">FCC998</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/%E5%8D%95%E5%85%83%E6%B5%8B%E8%AF%95/1.htm">单元测试</a> <div>一、2023年国赛赛题题目1:任意输入2个正整数值分别存入x、y中,据此完成下述分析:若x≤0或y≤0,则提示:“输入不符合要求。”;若2值相同,则提示“可以构建圆形或正方形”;若25,则提示“可以构建矩形”;若0=5){result="可以构建椭矩形";}else{result="可以构建长方形";}returnresult;}}测试代码:publicclassTestCs01{Cs01cs01</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>