Loadrunner9.5Flex性能測試_第1頁
Loadrunner9.5Flex性能測試_第2頁
Loadrunner9.5Flex性能測試_第3頁
Loadrunner9.5Flex性能測試_第4頁
Loadrunner9.5Flex性能測試_第5頁
已閱讀5頁,還剩6頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

1、Loadrunner 9.5 flex 性能測試Loadrunner 9.5 flex性能測試(一)準備工作性能測試是一項浩大的工程,若你只想隨便找臺機器裝上LoadR unner后,造幾條數(shù)據(jù),弄幾個并發(fā)用戶簡單跑一下出來結(jié)果就可以萬事大吉了,那你就大錯特錯了!這樣得出的測試結(jié)果沒有任何價值和意義,當然更無法依此評估出你貴公司系統(tǒng)的性能了。性能測試真正開始執(zhí)行之前除了編寫詳細的性能測試計劃所需的資源(軟 件+硬件+人力)、設計測試腳本、準備測試數(shù)據(jù)、搭建測試環(huán)境外,還需要注 意一下細節(jié): 如何保證性能測試的順利開展和執(zhí)行?1. 首先考慮你性能測試的目標是什么,需要哪些人員協(xié)助你才能完成,然后

2、協(xié)調(diào)相關人員(DBA網(wǎng)管、開發(fā)人員等),保證在真正開展過程中能有 效得到他們的協(xié)助和支持(性能測試不是一個人就能完成的,除非你“全才”啦);2. 你計劃中需要申請的資源,比如運行con toller的機器,是否符合你的預 期要求,Cpu是否有足夠的處理能力,安裝的操作系統(tǒng)是否符合你的要求(loadrunner9.5 除load Generator 外都不能安裝在64位機操作系統(tǒng)下,若沒看清楚安裝文件(安裝程序下 helpinstall.pdf)中system requireme nts for in stalli ng說明的話,你安裝完成會發(fā)現(xiàn)自己白忙活了,還得重裝os然后重來一次);3. 你

3、要測試的程序是否功能都沒問題了, 若程序還有變更,請千萬不要在錄 制部分后又變更了,你需要的版本是一個功能穩(wěn)定的版本,能順利錄制腳 本的的版本);4. 在測試執(zhí)行前你是否召集開發(fā)和相關人員對程序中明顯需要優(yōu)化的地方(你功能測試執(zhí)行時系統(tǒng)有些功能就無法忍受的慢) 進行了優(yōu)化,這樣可 以大大縮短你的性能測試周期;5. 在選擇loadrunner工具前,一定要慎重,你的程序設計語言和架構(gòu)及其 所運用的技術,此工具是否都支持,不然后續(xù)你需要自行開發(fā)的腳本就太 多了,可能面臨重新選擇測試工具的嚴重問題);6. 分險分析:技術風險、風險分析、分險應對措施和風險監(jiān)控方法。設計測試腳本?1. 識別可能的系統(tǒng)性

4、能問題,多與相關人員分析討論。2. 你所測系統(tǒng)的重點業(yè)務是什么?都有哪些角色參與?業(yè)務邏輯是什么樣 的?用戶頻繁使用的功能是否都考慮周全了?3. 參數(shù)化數(shù)據(jù)的來源?都需要哪些檢查點?腳本的精簡程度?準備測試數(shù)據(jù)?1. 基礎數(shù)據(jù):要更符合實際需求,人員、角色、初始化數(shù)據(jù)等;2. 業(yè)務數(shù)據(jù);要更符合實際業(yè)務,數(shù)據(jù)最好不要相同的數(shù)據(jù),無效的數(shù)據(jù), 要類別豐富、覆蓋所有業(yè)務邏輯的基礎數(shù)據(jù);可以通過自動化工具直接生 成;數(shù)據(jù)庫腳本生成(單一數(shù)據(jù),關聯(lián)幾個表的數(shù)據(jù)最好不用腳本生成); 用Id生成。搭建測試環(huán)境?1. 網(wǎng)絡(帶寬、可使用的有效ip地址個數(shù));2. 服務器的配置;3. 當前測試環(huán)境的局限性(無

5、法模擬的測試環(huán)境都有哪些) 需求分析和需求轉(zhuǎn)化客戶的性能需求不可測試、沒有需求、需求模糊,要通過與客戶、開發(fā)人員的溝 通獲得可測試、可衡量和可量化的性能需求1.8/2原則2. 經(jīng)驗值3. 平均并發(fā)用戶數(shù)C= nL/T (n:用戶數(shù)量login session 的數(shù)量,L:用 戶平均使用時長login session 的時長,T:考察的時間段)4. 并發(fā)用戶峰值:C1= C+ 3VCeg1 :見圖 example1、-I I b ': J- .20 r .141 ; fl上;I di廿啊1D0Ij7- HJP15 的收徐 血屮h; i"務1小1收為;以- 1'70 hj

6、. -.1 lJ'(. -ijr m交琳諂劇的業(yè)養(yǎng)ttw中毎醬業(yè)齊需/ H: ! - i- j 15, J ;1'丁 J翼陸藺個為試需掩現(xiàn)"業(yè)務M的兩倍皿耐.押卜0曲山;址為(100115 :.x7+TDOx7O *5+1 OQk15%x3)x2-10OO h訕 j: 100160»6.25 u J '即叫i'.匸鎧対:W25WX8O將科8曲啊 x3600)->B.6B JP-汕LVQ r "JiLoadrunner 9.52flex性能測試(二)程序安裝和配置1、 從hp官方網(wǎng)站上下載loadrunner9.5 的試用版程序

7、(有 windows和linux 的版本);2、 按照步驟進行安裝(安裝之前先安裝必須的.net框架和其他組件);3、安裝文件的目錄及文件存放路徑一定不能含有中文,防止錯誤;另外最好不要選擇根目錄下,要新建一個文件夾,命名,然后安裝其下,安裝完成后,重啟。4、從 下載 LoadRunner9.51 patch安裝 LoadRunner_951.msp文件然后 下載 LoadRunner 9.52 patch 安裝 LoadRunner_952.exe 文件Ld9.50對flex的支持有以下問題:無法解析flex內(nèi)部的對象;在一臺機器上錄制的腳本無法在另一臺機器上正確運行;報錯如:java .i

8、o.IOException: file c:jarssyswincrm3.jar is not foundat hp.flex.ClassLoaderMa nipulator.loadClassPathStri ng(Class LoaderMa ni pulator.java:58)(這是在調(diào)試 日志中顯示的/HP_FLEX_JAVA_LOG_FILE下面是在界面中 的Replay log中顯示的)Error: En cod ing of AMF message failed. Error is : Excepti on Oc curred while invoking WriteObjec

9、t method - java .Ian g.ClassNotF oun dExcepti on: flex.messag in g.io.amf.Amf3Outputat java. net.URLCIassLoader$1.ru n( URLCIassLoader.java:200)at java.security.AccessC on troller.doPrivileged(Native Method)at java. net.URLClassLoader.fi ndClass(URLCIassLoader.java:188)at java .Ian g.ClassLoader.loa

10、dClass(ClassLoader.java:306)at sun. misc.La un cher$AppCIassLoadero adCIass(La un cher.java: 268)at java .Ian g.ClassLoader.loadClass(ClassLoader.java:251)at java.la ng.ClassLoader.loadClassl ntern aI(CIassLoader.java:319)at java.la ng.Class.forName0(Native Method)at java.la ng.CIass.forName(CIass.j

11、ava:164)at hp.flex.HPExternalizableWrapper.GetLCDSObjectOutputStream(HPExtern alizableWrapper.java:155)at hp.fIex.HPExternaIizabIeWrapper.GetObjectOutputStream(HPExternaIiz abIeWrapper.java:215)at hp.flex.HPExter nalizableWrapper.WriteObject(HPExter nalizableWrappe r.java:23)在Con troller 中添加其他ip地址(已

12、經(jīng)安裝了 age nt process ) Load Generators,運行報錯;Results Analysis中的 Set Global Filter中沒有 thinktime 選項,這樣就不能查看不包含thinktime的事務響應時間了;其他問題可在安裝后的readme.htm中查看升級到Ld9.52后則解決了此問題,這兩個補丁所解決的問題可以在下載的壓縮包中解壓的readme.htm文件中查看。5、然后用傳統(tǒng)的破解方法進行破解即可。google,破解方法如下(僅供學習研究人員參考,請大家支持正版軟件!):用 LR8.0 中的 mlr5lprg.dll 、lm70.dll 覆蓋 LR

13、9.5 安裝目錄下“ bin ”文 件夾中的對應文件;手動修改注冊表,刪除下面內(nèi)容:HKEY_LOCAL_MACHINESOFTWAREMercury In teractive'LoadRu nn erLice nse2HKEY_LOCAL_MACHINESOFTWAREMercuryI nteractive'LoadRu nn erLice ns e2History"AIBGEBFW-JVED-ZKEKEKEKEKEBDNQAF-KBRDN"="" HKEY_LOCAL _MACHINESOFTWAREMercuryI nteracti

14、ve'LoadRu nn erLice nse2Perma nen tLice nse ="AIBGEBFW-JVED-ZKEKEKEKEKEBDNQAF-KBRDN" "last"="AIBGEBFW-JVED-ZKEKEKEKEKEBDNQAF-KBRDN" HKEY_LOCAL_MACHINESOFTWAREMercuryI nteractive'LoadRu nn erLice nse2TemporaryLice nse="AEBGEBFS-AKEKEKEKE-KAUCA" HKEY_LOC

15、AL_MACHINESOFTWAREC lassesI nterface87B3ADD4-21EB-11d5-93EF-00105AA0FD2D ="ICo ntr ol"/當然也可以直接執(zhí)行刪除注冊的文件lr_Del_license(regedit).exe。然后使用老的注冊碼就可以使用了;global-100: AEAMAUIK-YAFEKEKJJKEEA-BCJGIweb-10000: AEABEXFR-YTIEKEKJJMFKEKEKWBRAUNQJU-KBYGBor( Ok1000 個用戶的 Global License : AEACFSJI-YASEKJJKEA

16、HJD-BCLBR)6安裝后的配置:在用戶環(huán)境變量中增加HP_FLEX_JAVA_LOG_FI的debug參數(shù);value為:目錄日志文件名稱。Eg: C:ldlogflex.log在錄制腳本的 Vugen 中的 Toole >Recording Options->Flex ->Externa lizable Objects 下添加Lib文件,這樣就可以正常解析 測試系統(tǒng)中的 定義的類和對象了,并且使得腳本中的文件結(jié)構(gòu)更加清晰。添加的文件:flex-messagi ng-commo n.jarflex-messagi ng-core.jar其他與flex和spring相關的文

17、件;測試系統(tǒng)自定義的jar包,如:syswincrm31.jar這樣就可以正常解析flex協(xié)議下所有請求數(shù)據(jù)了,并且可以使得錄制的文件的結(jié)構(gòu)更加清晰,方便參數(shù)化。Loadrunner 9.52 flex性能測試(三)腳本錄制和回放1、錄制時無法彈出IE , google 一下,解決辦法如下:主要是LR的注冊信息被修改,無法找到IE路徑。如何重新注冊LR呢?在lr的安裝目錄(例如D:Program FilesMercuryLoadRunnerbin )下,單擊 register_vugen.bat 文件,注冊信息被重新 改寫了。不過別忘了最后一步。重新啟動一下,好了;有多個瀏覽器時,將IE置為默

18、認瀏覽器;由于IE的第三方插件的影響,IE工具-Internet選項- 高級,把 啟用第三方瀏覽器擴展”的選中去掉即可;對于 Windows 2003 上無法錄制 IE6/7,導致 IE Crash,iedw.exe(IE Crash Detection)報告錯誤事件, 可能原因是Windows Server默認對IE加載DEP數(shù)據(jù)執(zhí)行保護)特性,而Vugen.exe剛好又跟DEP沖突。方法:我的電腦 右鍵屬性-高級- 性能”部分的 設置”數(shù)據(jù)執(zhí)行保護”點擊 添加” 按鈕-將LR安裝目錄bin下的vugen.exe添加進去-點擊確定,重啟一下LR,就可以錄制了。2、錄制不到腳本選擇的協(xié)議不對,

19、有時需要選擇多個協(xié)議,這個需與開發(fā)、系統(tǒng)架構(gòu)師溝通; 沒有選擇jar包;檢查防火墻個殺毒軟件,關閉所有的網(wǎng)絡監(jiān)測;早期的版本(Ld8.0以前的版本)不能很好的支持IE6以上的版本,換成IE6即可;Flex需要客戶端下安裝flash,并且IE選項的安全設置中設置可以訪問所有active控件;3、錄制的腳本回放錯誤選擇的協(xié)議不對(應選擇多個協(xié)議或其他協(xié)議);沒有選擇jar包,無法解析數(shù)據(jù);自動關聯(lián)錯誤;動態(tài)數(shù)據(jù)沒有做關聯(lián);Flex協(xié)議錄制的腳本沒有辦法產(chǎn)生自動關聯(lián)時,需要下面的Ld中自帶的函數(shù)進行自定義:選擇另一臺機器上錄制的ld9.50版本的腳本,原來選擇的 http/flex兩個協(xié)議的腳本,回

20、放報錯Replay log 女口下:Error: Encoding of AMF message failed. Error is : Exception Occurred while invoking WriteObject method-javaang.ClassNotFoundException:flex.messaging.io.amf.Amf3Output(Enter to WriteObject WriteObject throws exception:java.lang.ClassNotFoundException:flex.messaging.io.amf.Amf3Output

21、后臺 debug log)at .URLCIassLoader$1.run(URLCIassLoader.java:200)at java.security.AccessController.doPrivileged(Native Method)at .URLCIassLoader.findClass(URLCIassLoader.java:188)at java.lang.ClassLoader.loadClass(ClassLoader.java:306)at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:268)at j

22、ava.lang.ClassLoader.loadClass(ClassLoader.java:251)at java.lang.ClassLoader.loadClasslnternal(ClassLoader.java:319)at java.lang.Class.forName0(Native Method)at java.lang.Class.forName(Class.java:164)at hp.flex.HPExternalizableWrapper.GetLCDSObjectOutputStream(HPExternalizableWrapper.java:155)at hp.

23、flex.HPExternalizableWrapper.GetObjectOutputStream(HPExternalizableWrapper.java:215)at hp.flex.HPExternalizableWrapper.WriteObject(HPExternalizableWrapper.java:23)無法解析,原來機器上的jar包的位置在本機器上不同引起的因缺少錄制時候選擇的jar包,選擇的jar包的位置變化了或者引用的jar包已經(jīng)刪除了。解決方法:重新在 Run-time settings >Flex >Externalizable Objects 中增加

24、 jar 包(因為原 來引用的jar包的位置已經(jīng)發(fā)生變化了),增加 Recording Options中的jar是沒用的。重復記錄導致: Error: Server returned error for message #1 : "AMF call returned an error, d escribed in XML seen in extended log"可以用打開所有 log (Run-time Setting->General->L og->Extended log,全部選擇上),然后回放腳本,進行具體問題的跟蹤,一般是由于程序中限定 不允許數(shù)

25、據(jù)重復(或數(shù)據(jù)記錄的某個字段不能重復導致的,一般發(fā)生在新建和修改里面。(有些可能不是程序中作限定,而是 數(shù)據(jù)庫中有唯一性限制,索引或主健等),刪除相關的所有記錄后 再次回放即可。(本系統(tǒng)中的此次 測試岀現(xiàn)這個錯誤是由于刪除了客戶臺帳的新建客戶數(shù)據(jù),但 在客戶會中生成的主數(shù)據(jù)沒有刪除導致的)版本不兼容,在一個ld版本下錄制的腳本在一個版本下使用。請求超時或修改了程序(但你不知道)。根據(jù)Replay log的具體錯誤內(nèi)容查看原因(結(jié)合 Replay log (F10單步執(zhí)行)、web服務的后臺 日志和程序綜合分析)注:web服務后臺日志的顯示級別在 WEB-INFp

26、erties 或者中application-context.xml中的props設置(最好只顯示錯誤,不然日志文件太大,不容易 分析)。4、錄制的可以回放的腳本卻不能操作成功對動態(tài)數(shù)據(jù)沒有做關聯(lián);有驗證碼:如果請求進去后,服務器雖然判別請求非法,但是它仍能成功處理,告訴你請求數(shù)據(jù)有 問題,那么它返回的http代碼仍是200!只是頁面上會有它的提示信息錯誤!LR只判斷請求的狀態(tài)是否正確,不判斷業(yè)務數(shù)據(jù)是否正確!如果要做判斷得自己寫檢查點判別!web服務器后臺日志顯示 Unknown AMF question的錯誤,請求無效導致選擇的協(xié)議不完整,錄制的腳本不完整導致的;打開Extended Log

27、單步執(zhí)行查看 Replay log和web服務后臺日志,然后分析Loadrunner 9.5 flex性能測試(四)腳本的參數(shù)化和關聯(lián)1、腳本參數(shù)化之前所做的 工作:保存錄制好的一個原始的腳本;然后另存一份進行參數(shù)化(備份一份,以防參數(shù)化錯誤導致無法恢 復初始腳本而重新錄制腳本,浪費時間);然后把需要關聯(lián)的進行關聯(lián),然后回放成功且測試系統(tǒng)中成功(eg :能看到新增的相應記錄)再保存一份;腳本中是否有注釋,沒有則添加注釋,增加腳本可讀性,方便參數(shù)化和以后重用;腳本中是否建立了事務的開始和結(jié)束點(錄制時需要考慮的);Session和動態(tài)數(shù)據(jù)是否正確和全部進行了參數(shù)化替換,(注意一個參數(shù)錄制后分行的

28、情況,要截 取一部分通過查找功能一一檢查腳本;參數(shù)前面的特殊字符不進行替換)eg如下:flex_web_request("amf;jsessionid=""LFgVY20Tly1K0pQqprsXvwFpKhvqg5KznhJn43syvgXGGpyDNh42!1755959435II"URL= "LFgVY20Tly1K0pQqprsXvwFpKhvqg5KznhJn43syvgXGGpyDNh42!1755959435II"Method=POST","Resource=0","RecCont

29、entType=application/x-amf","Referer="Snapshot=t3.inf","Mode=HTML","EncType=application/x-amf", "BodyBinary=x00x03x00x00x00x01x00x04nullx00x02/" "1x00x00x01x18nx00x00x00x01x11n""x81x13Oflex.messaging.messages.RemotingMessagex13operation

30、r" "source't""bodyx13messageIdx11clientIdx15timeToLivex13timestampx0Fheade" "rsx17destinationx06x0Bloginx01tx05x01x06x07gwax06r" "666666x06IAACD40DF-FFC4-8641-4CB8-02F1481FB0F4x01x04x00x04" "x00nx0Bx01x15DSEndpointx06rmy-amft""DSIdx06I3

31、E3B399F-351B-D1FC-FC78-81B50BD94526x01x06x1DsessionS e""rvice",LAST);flex_amf_call("AMF3_call_1", "Gateway= "LFgVY20Tly1K0pQqprsXvwFpKhvqg5KznhJn43syvgXGGpyDNh42!1755959435II"Snapshot=t4.inf",MESSAGE,"Method=null","TargetObjectId=/2",B

32、EGIN_ARGUMENTS,"<AMF3><object-externalizable-custom>" "vflex.messaging.messages.RemotingMessage>n <destination" ">sessionService</destination>n vmessageId"">4ADBA44D-56DE-48EF-3CF0-02F14929E669</messageId>n <timestamp>0<

33、/""timestamp>n <timeToLive>0</timeToLive>n <headers>n <entry>n ""<string>DSEndpoint</string>n <string>my-amf</string>n </""entry>n <entry>n <string>DSId</string>n vstring" ">3E3B399F

34、-351B-D1FC-FC78-81B50BD94526</string>n </entry>n </" "headers>n <operation>getLoginlnfo</operation>n <parameters/>n</" "flex.messaging.messages.RemotingMessage></object-externalizable-custom" "></AMF3>",END_ARGU

35、MENTS,LAST);上面錄制的腳本通過回放對比(腳本的View Tree模式下的Server Response可以很明顯的看至叮sessionid需要關聯(lián),直接關聯(lián)參數(shù)化替換即可;而 DSid也需要關聯(lián),然而通過對比腳本的 上下文發(fā)現(xiàn)前面的X06I并不需要參數(shù)化(后面的此相關內(nèi)容中都沒有x06I )保存腳本后,在每個腳本中增加readme文件,簡要描述一下腳本的錄制內(nèi)容、多少個參數(shù)及其參數(shù)運行機制等。以上的文件保存還有參數(shù)化及其腳本中的注釋一律用英文(Ld對中文支持的不好)2、Flex 中 sessionid 如何關聯(lián)?首先在 Generation Log 中查找第一返回 sessioni

36、d 的AMF Response的xml文件(也可以在 View Tree模式下查看第一個 flex amf call后的Server response中返回的內(nèi)容,然后右側(cè)選擇 Snap shot (Both+XML)得到如下xml文件,但目前的版本中沒有看到此文件)eg :AMF notify: AMF Response xmlvAMFPacket AMF_version="3"><AMFHeaders>vAMFHeader name="AppendToGatewayUrl" must_understand="true&qu

37、ot;><string>jsessionid=LFgVY20Tly1K0pQqprsXvwFpKhvqg5KznhJn43syvgXGGpyDNh42!1755959435</s tring></AMFHeader></AMFHeaders><Messages>vMessage method="/1/onResult" target=""><AMF3><object-externalizable-custom>vflex.messaging.messages.

38、AcknowledgeMessageExt><byte>-88</byte><byte>3</byte>vflex.messaging.io.amf.ASObject serialization="custom"><unserializable-parents/>vmap>vdefault>vloadFactor>0.75v/loadFactor>vthreshold>12v/threshold>v/default>vint>16v/int>vint

39、>2v/int>vstring>DSIdv/string>vstring>3E3B399F-351B-D1FC-FC78-81B50BD94526v/string> vstring>DSMessagingVersionv/string>vdouble>1.0v/double>v/map>vflex.messaging.io.amf.ASObject><default>vinHashCode>false</inHashCode>vinToString>false</inToStrin

40、g></default></flex.messaging.io.amf.ASObject></flex.messaging.io.amf.ASObject>vlong>1267065045765</long><byte-array>Pjs5nzUreVPrVzhfC43tVg=v/byte-array><byte-array>Pjs5nzU9e4JIWT2jzHpllQ=v/byte-array>vbyte>2v/byte>vbyte-array>k/Z0Cs1L2rKvVALxS

41、C+pkg=v/byte-array>vbyte>0v/byte>v/flex.messaging.messages.AcknowledgeMessageExt>v/object-externalizable-custom>v/AMF3>v/Message>v/Messages>v/AMFPacket>關聯(lián)的函數(shù)放在第一個flex_amf_call請求的后面,在第一個岀現(xiàn)session id的請求前面(即服務器返回的帶有session的響應數(shù)據(jù)是在第一個請求后返回到客戶端的)lr_message("resp %s", l

42、r_eval_stri ng( "resp");lr_xml_get_values("XML=resp", "ValueParam=seid","Query=/AMFPacket/AMFHeaders/AMFHeader/stri ng",LAST);lr_xml_get_values("XML=resp", "ValueParam=dsid","Query=/stringposition() mod 4 =2",LAST);lr_message("seid %s", lr_eval_str ing( "seid");lr_save_var(lr_eval_string("seid")+ 12, 64, 0, "sid"

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論