关于开通博客

考虑了很久,今天终于开通了这个博客。我其实不太善于文字的人,虽然以前很热爱文学,但是,自从选择理科之后,也就不怎么去关注文学了,所以,本来一般的文字功底,就日渐干涸了。我其实挺关注优快云的,从之前,通过优快云下载资料,到慢慢的去关注优快云上面的一些好的博客,即使偶尔在工作时间,依然抽空浏览一下,一是可以放松一下,二是关注行业的发展以及一些好的技术。今天之所以决定开通这个博客,其实也是一个很普通的,很大众的原因,一是总结自己,不论是技术还是生活的心情,二是可以分享一些自己的积累。

说说自己吧,我之前是在上海工作,今年4月份毅然辞了工作,来到北京。诚然有小时候对京城的憧憬,但是更主要是个人的原因。来到北京之后,找工作还是蛮顺利的,面了两家公司,后来进了一个我蛮期待的公司(做CPU的,公司名就不说了),我之前是做DSP方面的,来到这个公司之后,就开始做android以及linux,大学时,自己自学了Linux,所以上手也是蛮快的,而且自己也是计算机出身,所以从android应用到内核驱动,都有写过。最近这段时间,由于遇到了一些事情,自己也开始思考,2013年,自己做了什么,经历了什么,由于自己在部门,在这个公司来说,不是核心部门,所以,与自己渴望的,希望的东西其实是不相符的。我不迷茫,但是,我却痛苦,因为自己期望做的,没有达到,我自己有规划,有目标,但是需要历练,需要在困难中成长,我不怕困难,但是我怕闲下来没事做。

在工作之余,我也会自己主动去学习一些新的东西,去动手,去积累,但是,诚然,找不到成就感!唉,希望2014会是好的,我会将自己的一些积累,一些学习,慢慢的写在博客中。就先这样吧,顺便提一下,我看了优快云中一些优秀的博客,对与“念茜”这位博主,非常钦佩,作为一个女程序员,可以比很多男程序员优秀,很棒。在技术领域,我相信没有性别的差异,只有机遇和付出的差异!

<?xml version="1.0" encoding="UTF-8"?> <jmeterTestPlan version="1.2" properties="5.0" jmeter="5.4.3"> <hashTree> <TestPlan guiclass="TestPlanGui" testclass="TestPlan" testname="测试计划" enabled="true"> <boolProp name="TestPlan.functional_mode">false</boolProp> <boolProp name="TestPlan.tearDown_on_shutdown">true</boolProp> <boolProp name="TestPlan.serialize_threadgroups">false</boolProp> <elementProp name="TestPlan.user_defined_variables" elementType="Arguments"> <collectionProp name="Arguments.arguments"/> </elementProp> </TestPlan> <hashTree> <Arguments guiclass="ArgumentsPanel" testclass="Arguments" testname="全局静态变量" enabled="true"> <collectionProp name="Arguments.arguments"> <elementProp name="Cookie" elementType="Argument"> <stringProp name="Argument.name">Cookie</stringProp> <stringProp name="Argument.value">SESSION=MzljMDlmNjUtMDVmZi00YTNiLTlkMWYtZmQ1YzJhOWEyZWRh; Hm_lvt_5734acaafaf7a1011672a1fef0933656=1691372752,1691977065,1692078269,1692669577; Hm_lpvt_5734acaafaf7a1011672a1fef0933656=1692944271</stringProp> <stringProp name="Argument.metadata">=</stringProp> </elementProp> </collectionProp> </Arguments> <hashTree/> <Arguments guiclass="ArgumentsPanel" testclass="Arguments" testname="环境变量-FiF口语训练线上巡检-冯义" enabled="true"> <collectionProp name="Arguments.arguments"> <elementProp name="iplat" elementType="Argument"> <stringProp name="Argument.name">iplat</stringProp> <stringProp name="Argument.value">www.fifedu.com</stringProp> <stringProp name="Argument.metadata">=</stringProp> <stringProp name="Argument.desc">平台主域名</stringProp> </elementProp> <elementProp name="oral" elementType="Argument"> <stringProp name="Argument.name">oral</stringProp> <stringProp name="Argument.value">moral.fifedu.com</stringProp> <stringProp name="Argument.metadata">=</stringProp> <stringProp name="Argument.desc">口语主域名</stringProp> </elementProp> <elementProp name="ACCOUNTtea" elementType="Argument"> <stringProp name="Argument.name">ACCOUNTtea</stringProp> <stringProp name="Argument.value">csbfsuoralt01</stringProp> <stringProp name="Argument.metadata">=</stringProp> </elementProp> <elementProp name="appVersiontea" elementType="Argument"> <stringProp name="Argument.name">appVersiontea</stringProp> <stringProp name="Argument.value">6.7.2</stringProp> <stringProp name="Argument.metadata">=</stringProp> </elementProp> <elementProp name="schoolId" elementType="Argument"> <stringProp name="Argument.name">schoolId</stringProp> <stringProp name="Argument.value">2000000026000000001</stringProp> <stringProp name="Argument.metadata">=</stringProp> </elementProp> <elementProp name="izuoye" elementType="Argument"> <stringProp name="Argument.name">izuoye</stringProp> <stringProp name="Argument.value">izuoye.fifedu.com</stringProp> <stringProp name="Argument.metadata">=</stringProp> </elementProp> <elementProp name="oralenglish" elementType="Argument"> <stringProp name="Argument.name">oralenglish</stringProp> <stringProp name="Argument.value">oralenglish.fifedu.com</stringProp> <stringProp name="Argument.metadata">=</stringProp> </elementProp> <elementProp name="ACCOUNTstu" elementType="Argument"> <stringProp name="Argument.name">ACCOUNTstu</stringProp> <stringProp name="Argument.value">csbfsuautostu01</stringProp> <stringProp name="Argument.metadata">=</stringProp> </elementProp> <elementProp name="appVersionstu" elementType="Argument"> <stringProp name="Argument.name">appVersionstu</stringProp> <stringProp name="Argument.value">6.7.2</stringProp> <stringProp name="Argument.metadata">=</stringProp> </elementProp> </collectionProp> </Arguments> <hashTree/> <CookieManager guiclass="CookiePanel" testclass="CookieManager" testname="HTTP Cookie管理器" enabled="true"> <collectionProp name="CookieManager.cookies"/> <boolProp name="CookieManager.clearEachIteration">false</boolProp> <boolProp name="CookieManager.controlledByThreadGroup">false</boolProp> </CookieManager> <hashTree/> <ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="测试环境" enabled="true"> <intProp name="ThreadGroup.num_threads">1</intProp> <intProp name="ThreadGroup.ramp_time">1</intProp> <longProp name="ThreadGroup.delay">0</longProp> <longProp name="ThreadGroup.duration">0</longProp> <stringProp name="ThreadGroup.on_sample_error">continue</stringProp> <boolProp name="ThreadGroup.scheduler">false</boolProp> <elementProp name="ThreadGroup.main_controller" elementType="LoopController" guiclass="LoopControlPanel" testclass="LoopController" testname="LoopController" enabled="true"> <boolProp name="LoopController.continue_forever">false</boolProp> <intProp name="LoopController.loops">1</intProp> </elementProp> </ThreadGroup> <hashTree> <org.apache.jmeter.control.UtpSimpleController guiclass="org.apache.jmeter.control.gui.UtpSimpleControlPanel" testclass="org.apache.jmeter.control.UtpSimpleController" testname="登录首页" enabled="true"> <stringProp name="STEP_ID">8dd8d36b-43bf-4184-9a48-63cac5a69c87</stringProp> </org.apache.jmeter.control.UtpSimpleController> <hashTree> <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="登录" enabled="true"> <elementProp name="HTTPsampler.Arguments" elementType="Arguments"> <collectionProp name="Arguments.arguments"> <elementProp name="" elementType="HTTPArgument"> <boolProp name="HTTPArgument.always_encode">false</boolProp> <stringProp name="Argument.value"></stringProp> <stringProp name="Argument.metadata">=</stringProp> </elementProp> </collectionProp> </elementProp> <stringProp name="STEP_ID">cc55eb23-36cb-4edb-af7d-b8c66372bd77</stringProp> <stringProp name="HTTPSampler.protocol">https</stringProp> <stringProp name="HTTPSampler.domain"></stringProp> <stringProp name="HTTPSampler.path">https://ktest.fifedu.com/kyxl-app//account/userLogin?appNetwork=WIFI&appResolX=828&appResolY=1792&appType=1&appVer=6.7.2&loginName=AHHF71201&osType=2&osVer=18.5&password=cXlOOWFjaGkhQCM=&phoneModel=iPhone 11</stringProp> <stringProp name="HTTPSampler.contentEncoding">UTF-8</stringProp> <boolProp name="HTTPSampler.use_keepalive">true</boolProp> <stringProp name="HTTPSampler.method">POST</stringProp> <stringProp name="HTTPSampler.connect_timeout">60000</stringProp> <stringProp name="HTTPSampler.response_timeout">60000</stringProp> <boolProp name="HTTPSampler.follow_redirects">true</boolProp> <boolProp name="HTTPSampler.auto_redirects">false</boolProp> <boolProp name="HTTPSampler.postBodyRaw">true</boolProp> </HTTPSamplerProxy> <hashTree> <org.apache.jmeter.extractor.UtpExtractor guiclass="org.apache.jmeter.extractor.gui.UtpExtractorGui" testclass="org.apache.jmeter.extractor.UtpExtractor" testname="参数提取" enabled="true"> <stringProp name="STEP_ID">f747501a-be32-4ce6-87bb-a9c420c2b3ae</stringProp> <stringProp name="DC_TASK_ID"></stringProp> <stringProp name="UtpAssert.extractData">[ { "varName":"tokenstu", "expression":"$.data.token", "obj":"responseData", "defaultValue":"", "id":"b3256752-20af-f669-307b-70e2e72c0584", "globalVar":false, "type":"jsonPath", "matchNumber":1 } ]</stringProp> </org.apache.jmeter.extractor.UtpExtractor> <hashTree/> <org.apache.jmeter.extractor.UTPJSR223PostProcessor guiclass="TestBeanGUI" testclass="org.apache.jmeter.extractor.UTPJSR223PostProcessor" testname="后置脚本步骤" enabled="true"> <stringProp name="STEP_ID">9cd30030-bca2-49f0-bb7d-3f9d42244fc7</stringProp> <stringProp name="cacheKey">false</stringProp> <stringProp name="DC_TASK_ID">DC_TASK_FLAG0.36192556040486945</stringProp> <stringProp name="scriptLanguage">groovy</stringProp> <stringProp name="parameters"></stringProp> <stringProp name="script">import java.security.MessageDigest import java.math.BigInteger try { // 1. 确保获取 token 变量值的安全方式 String tokenstu = vars.get("tokenstu") ?: "" // 2. 定义固定参数值 String uid = "05973fecfd4904a4a93c8d7ee43eb074" String SECRET_KEY = "fifedu@2014-9999!@#_appId" // 3. 拼接加密字符串 String rawString = uid + tokenstu + SECRET_KEY // 4. MD5 加密处理 (明确编码格式) MessageDigest md = MessageDigest.getInstance("MD5") md.update(rawString.getBytes("UTF-8")) // 5. 生成十六进制哈希值并补零 String appId = new BigInteger(1, md.digest()).toString(16).padLeft(32, &apos;0&apos;) // 6. 关键:正确存储变量到 JMeter 上下文 vars.put("APPIDstu", appId) // 7. 验证变量是否存储成功 if (vars.get("APPIDstu") == appId) { log.info("✅ 变量存储成功! APPIDstu=${appId}") } else { log.error("❌ 变量存储失败!") } } catch (Exception e) { log.error("❌ 脚本执行错误: " + e.getMessage(), e) // 设置默认值避免后续引用失败 vars.put("APPIDstu", "ERROR_" + System.currentTimeMillis()) }</stringProp> </org.apache.jmeter.extractor.UTPJSR223PostProcessor> <hashTree/> <HeaderManager guiclass="HeaderPanel" testclass="HeaderManager" testname="请求头管理器" enabled="true"> <collectionProp name="HeaderManager.headers"/> </HeaderManager> <hashTree/> </hashTree> <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="自主学习列表selfTaskInfo" enabled="true"> <elementProp name="HTTPsampler.Arguments" elementType="Arguments"> <collectionProp name="Arguments.arguments"> <elementProp name="" elementType="HTTPArgument"> <boolProp name="HTTPArgument.always_encode">false</boolProp> <stringProp name="Argument.value"></stringProp> <stringProp name="Argument.metadata">=</stringProp> </elementProp> </collectionProp> </elementProp> <stringProp name="STEP_ID">f00b8a03-8910-ba7d-2915-278a2d0dfec6</stringProp> <stringProp name="HTTPSampler.protocol">https</stringProp> <stringProp name="HTTPSampler.domain"></stringProp> <stringProp name="HTTPSampler.path">https://ktest.fifedu.com/kyxl-app/stu/index/selfTaskInfo?userId=849d9c3856c548cdb831def88d220fe7</stringProp> <stringProp name="HTTPSampler.contentEncoding">UTF-8</stringProp> <boolProp name="HTTPSampler.use_keepalive">true</boolProp> <stringProp name="HTTPSampler.method">POST</stringProp> <stringProp name="HTTPSampler.connect_timeout">60000</stringProp> <stringProp name="HTTPSampler.response_timeout">60000</stringProp> <boolProp name="HTTPSampler.follow_redirects">true</boolProp> <boolProp name="HTTPSampler.auto_redirects">false</boolProp> <boolProp name="HTTPSampler.postBodyRaw">true</boolProp> </HTTPSamplerProxy> <hashTree> <org.apache.jmeter.modifiers.UTPJSR223PreProcessor guiclass="TestBeanGUI" testclass="org.apache.jmeter.modifiers.UTPJSR223PreProcessor" testname="前置脚本步骤_copy" enabled="true"> <stringProp name="STEP_ID">d907f085-cc60-a2f9-90a8-01ebb0ac6d98</stringProp> <stringProp name="cacheKey">false</stringProp> <stringProp name="DC_TASK_ID">DC_TASK_FLAG0.574227720764738</stringProp> <stringProp name="scriptLanguage">javascript</stringProp> <stringProp name="parameters"></stringProp> <stringProp name="script">// 导入必要的 Java 类 var URL = Java.type(&apos;java.net.URL&apos;); var URLDecoder = Java.type(&apos;java.net.URLDecoder&apos;); var MessageDigest = Java.type(&apos;java.security.MessageDigest&apos;); var UUID = Java.type(&apos;java.util.UUID&apos;); // 生成签名的函数 function generateSign(params, uuid, tokenstu) { var myKey = &apos;fifedu@2014-9999!@#&apos;; // 提取参数值并处理列表类型 var values = []; for (var key in params) { var value = params[key]; if (value instanceof java.util.List) { // 处理列表值:取第一个非空元素 for (var i = 0; i < value.size(); i++) { if (value.get(i) !== null && value.get(i).toString().trim() !== &apos;&apos;) { values.push(value.get(i).toString()); break; } } } else if (value !== null && value.toString().trim() !== &apos;&apos;) { // 处理普通值 values.push(value.toString()); } } // 排序并连接值 values.sort(); var text = values.join(&apos;&apos;) + myKey + tokenstu + uuid; vars.put(&apos;text_stu9&apos;, text); // 生成 MD5 签名 var md = MessageDigest.getInstance(&apos;MD5&apos;); var digest = md.digest(new java.lang.String(text).getBytes(&apos;UTF-8&apos;)); // 将字节数组转换为十六进制字符串 var hexString = &apos;&apos;; for (var i = 0; i < digest.length; i++) { var hex = (digest[i] & 0xFF).toString(16); if (hex.length === 1) { hex = &apos;0&apos; + hex; } hexString += hex; } return hexString; } // 1. 生成随机 UUID var generatedUuid = UUID.randomUUID().toString(); vars.put(&apos;uuid&apos;, generatedUuid); // 获取当前采样器的 URL 和查询参数 var samplerUrl = sampler.getUrl().toString(); var url = new URL(samplerUrl); var query = url.getQuery(); // 解析查询参数 var params = {}; if (query !== null) { var queryPairs = query.split(&apos;&&apos;); for (var i = 0; i < queryPairs.length; i++) { var pair = queryPairs[i].split(&apos;=&apos;, 2); var name = URLDecoder.decode(pair[0], &apos;UTF-8&apos;); var value = pair.length > 1 ? URLDecoder.decode(pair[1], &apos;UTF-8&apos;) : &apos;&apos;; params[name] = value; } } // 生成签名并存储变量 var tokenstu = vars.get(&apos;tokenstu&apos;) || &apos;&apos;; vars.put(&apos;signstu9&apos;, generateSign(params, generatedUuid, tokenstu)); vars.put(&apos;uuid_stu9&apos;, generatedUuid); vars.put(&apos;token_stu9&apos;, tokenstu); vars.put(&apos;params_stu9&apos;, JSON.stringify(params)); // 使用 JSON 代替 inspect()</stringProp> </org.apache.jmeter.modifiers.UTPJSR223PreProcessor> <hashTree/> <HeaderManager guiclass="HeaderPanel" testclass="HeaderManager" testname="请求头管理器" enabled="true"> <collectionProp name="HeaderManager.headers"> <elementProp name="UUID" elementType="Header"> <stringProp name="Header.name">UUID</stringProp> <stringProp name="Header.value">${uuid_stu9}</stringProp> </elementProp> <elementProp name="APPID" elementType="Header"> <stringProp name="Header.name">APPID</stringProp> <stringProp name="Header.value">${APPIDstu}</stringProp> </elementProp> <elementProp name="Authorization" elementType="Header"> <stringProp name="Header.name">Authorization</stringProp> <stringProp name="Header.value">Basic ${tokenstu}</stringProp> </elementProp> <elementProp name="APPTYPE" elementType="Header"> <stringProp name="Header.name">APPTYPE</stringProp> <stringProp name="Header.value">kyxl_student_app_ios</stringProp> </elementProp> <elementProp name="Accept" elementType="Header"> <stringProp name="Header.name">Accept</stringProp> <stringProp name="Header.value">*/*</stringProp> </elementProp> <elementProp name="appVersion" elementType="Header"> <stringProp name="Header.name">appVersion</stringProp> <stringProp name="Header.value">6.7.2</stringProp> </elementProp> <elementProp name="schoolId" elementType="Header"> <stringProp name="Header.name">schoolId</stringProp> <stringProp name="Header.value">2811000226000000690</stringProp> </elementProp> <elementProp name="Accept-Language" elementType="Header"> <stringProp name="Header.name">Accept-Language</stringProp> <stringProp name="Header.value">zh-Hans-CN;q=1, ru-CN;q=0.9</stringProp> </elementProp> <elementProp name="Accept-Encoding" elementType="Header"> <stringProp name="Header.name">Accept-Encoding</stringProp> <stringProp name="Header.value">gzip, deflate, br</stringProp> </elementProp> <elementProp name="TOKEN" elementType="Header"> <stringProp name="Header.name">TOKEN</stringProp> <stringProp name="Header.value">${tokenstu}</stringProp> </elementProp> <elementProp name="Content-Type" elementType="Header"> <stringProp name="Header.name">Content-Type</stringProp> <stringProp name="Header.value">application/x-www-form-urlencoded</stringProp> </elementProp> <elementProp name="LANGUAGE" elementType="Header"> <stringProp name="Header.name">LANGUAGE</stringProp> <stringProp name="Header.value">ENGLISH</stringProp> </elementProp> <elementProp name="User-Agent" elementType="Header"> <stringProp name="Header.name">User-Agent</stringProp> <stringProp name="Header.value">kyxl/6.7.2 (iPhone; iOS 18.5; Scale/2.00)</stringProp> </elementProp> <elementProp name="Content-Length" elementType="Header"> <stringProp name="Header.name">Content-Length</stringProp> <stringProp name="Header.value">39</stringProp> </elementProp> <elementProp name="Connection" elementType="Header"> <stringProp name="Header.name">Connection</stringProp> <stringProp name="Header.value">keep-alive</stringProp> </elementProp> <elementProp name="ACCOUNT" elementType="Header"> <stringProp name="Header.name">ACCOUNT</stringProp> <stringProp name="Header.value">AHHF71201</stringProp> </elementProp> <elementProp name="roleName" elementType="Header"> <stringProp name="Header.name">roleName</stringProp> <stringProp name="Header.value">STU</stringProp> </elementProp> <elementProp name="SIGN" elementType="Header"> <stringProp name="Header.name">SIGN</stringProp> <stringProp name="Header.value">${signstu9}</stringProp> </elementProp> </collectionProp> </HeaderManager> <hashTree/> </hashTree> </hashTree> </hashTree> <ResultCollector guiclass="ViewResultsFullVisualizer" testclass="ResultCollector" testname="查看结果树"> <boolProp name="ResultCollector.error_logging">false</boolProp> <objProp> <name>saveConfig</name> <value class="SampleSaveConfiguration"> <time>true</time> <latency>true</latency> <timestamp>true</timestamp> <success>true</success> <label>true</label> <code>true</code> <message>true</message> <threadName>true</threadName> <dataType>true</dataType> <encoding>false</encoding> <assertions>true</assertions> <subresults>true</subresults> <responseData>false</responseData> <samplerData>false</samplerData> <xml>false</xml> <fieldNames>true</fieldNames> <responseHeaders>false</responseHeaders> <requestHeaders>false</requestHeaders> <responseDataOnError>false</responseDataOnError> <saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage> <assertionsResultsToSave>0</assertionsResultsToSave> <bytes>true</bytes> <sentBytes>true</sentBytes> <url>true</url> <threadCounts>true</threadCounts> <idleTime>true</idleTime> <connectTime>true</connectTime> </value> </objProp> </ResultCollector> <hashTree/> </hashTree> </hashTree> </jmeterTestPlan> 不要省略,把修改后的脚本完整输出出来
最新发布
08-26
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值