Loadrunner技术交流(脚本的录制)--主讲人颢.doc_第1页
Loadrunner技术交流(脚本的录制)--主讲人颢.doc_第2页
Loadrunner技术交流(脚本的录制)--主讲人颢.doc_第3页
Loadrunner技术交流(脚本的录制)--主讲人颢.doc_第4页
Loadrunner技术交流(脚本的录制)--主讲人颢.doc_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

颢子(1111)(22854705) 13:57:41其实 在进行测试脚本录制之前 还有很多的工作要做 首先要先确定 典型交易 选取典型交易的原则 主要有以下几种方法 1 经常使用的操作 2 对数据库交互比较多的 3 操作路径复杂的 4 程序调用方法对系统性能影响大的。 颢子(1111)(22854705) 13:59:25典型交易确定后 进行模拟真实的生产环境 进行典型交易的配比 然后 是需要和业务人员进行确认 包括 操作的确认 数据的确认 包括一些操作人员的权限确认 颢子(1111)(22854705) 13:59:45当然 数据的准备 可以和录制脚本同时进行 颢子(1111)(22854705) 14:01:21下面我简单说一下 脚本的录制 在整个测试工作中 脚本的录制执行 只是一个很小的环节 在我看来测试的前期准备其实是整个测试的重中之重 它关系到整个测试结果 颢子(1111)(22854705) 14:03:01下面我已b/s结构 举例 当然 在不同的前台展现 也会有不同的测试方法 现在比较流行的有 .net asp jsp jsf php 等 颢子(1111)(22854705) 14:04:46在录制脚本前 我们要首先了解 脚本一般由3部分组成 vuser_init ,Action ,vuser_end 颢子(1111)(22854705) 14:05:32一般 我们把登陆部分放到“vuser_init”部分,把需要测试的内容部分放到“Action”部分执行;但是如果是模拟多个用户登陆系统,则要把登陆部分放到Action部分来实现 颢子(1111)(22854705) 14:08:52vuser_init 和vuser_end 都只能存在一个,不能再分割,而Action 还可以分成无数多个部分 一个脚本中可以有多个action 当然我们已可以把 多个操作放到一个action中 颢子(1111)(22854705) 14:16:53以web协议为例 一般有两种录制的选择 html 及 url 脚本中采用HTML 页面的形式来表示,这种方式的Script 脚本容易维护,容易理解 url 颢子(1111)(22854705) 14:17:53url 录制的脚本 看上比较乱 它把每个图片 每个连接都作为脚本的一部分 录制下来 颢子(1111)(22854705) 14:20:04在点击 Start Record 后 我们就可以录制脚本了 这时候 你可以发现 录制的ie中的 端口变为7777 颢子(1111)(22854705) 14:21:48这个时候 lr 就作为了一个 中转站 把前台和后台进行的交互 把数据抓下来 并生成脚本 颢子(1111)(22854705) 14:25:56但是 我觉得脚本 很难用这种方式 讲 没有图片和事例 不用的应用可能要有不同的设置 颢子(1111)(22854705) 14:26:04不同的颢子(1111)(22854705) 14:30:28在点击Start Record 后 我们就可以按照 要录制的典型交易进行录制 一般在init 中我们录制登录 因为 init在脚本执行过程中 只执行一遍 action可以循环执行非洲黑驴(137655521) 14:31:49一般我们录一下脚本会很长 非洲黑驴(137655521) 14:32:09那如果今天没录完,第二天怎么才能接上上一天的脚本继续录呢 颢子(1111)(22854705) 14:32:21可以啊 非洲黑驴(137655521) 14:32:35咋录啊颢子(1111)(22854705) 14:34:44在进行录制脚本的时候 颢子(1111)(22854705) 14:35:09把 record the application starup 那个选项去掉非洲黑驴(137655521) 14:35:44哦,那就是说还得把昨天走的全走一次,到要录的时候再点击开始,是吗? 颢子(1111)(22854705) 14:35:49然后 按照 我们平时录制时一样进行操作 颢子(1111)(22854705) 14:36:02对 Empire上海(181491600) 14:36:33能不能 回放到 上次哪里 然后接着 路 Empire上海(181491600) 14:36:43不是 手工走到 那里 颢子(1111)(22854705) 14:37:07在执行到 要录地方 点击 record 就可以继续录制了 非洲黑驴(137655521) 14:37:12能回放到那里吗?省得再走一遍了 Empire上海(181491600) 14:37:22可以非洲黑驴(137655521) 14:37:32咋回放呢? 颢子(1111)(22854705) 14:37:33不能回放的 Empire上海(181491600) 14:37:40嘿嘿 我只知道 功能自动化 可以 非洲黑驴(137655521) 14:37:51LR不行吗? Empire上海(181491600) 14:37:58不可以么Empire上海(181491600) 14:38:22QTP 颢子(1111)(22854705) 14:38:24因为 你回放 只是建立了一个 web上的通信 Empire上海(181491600) 14:38:28ROBOT 都可以阿 颢子(1111)(22854705) 14:38:58回放时可以 但是 不能够回放到你要的那个页面 继续进行录制 Empire上海(181491600) 14:39:13明白了 非洲黑驴(137655521) 14:39:14LR应该enhancement 非洲黑驴(137655521) 14:39:21嗯啊,明白了以今天的名义(23294949) 14:39:40脚本的回放和录制是两个完全不同的操作,不能混合进行非洲黑驴(137655521) 14:39:58回放的作用是什么?非洲黑驴(137655521) 14:40:10是为了查找脚本的错误行吗颢子(1111)(22854705) 14:40:51因为 你回放的时候 你所看到的只是 镜像文件 回放的时候 你的ie没有把端口改为7777 也就是 lr 没有作为中转站 它无法继续抓取协议包 以今天的名义(23294949) 14:41:20可以这么说,目的是为了验证脚本能不能完全按照手工操作的步骤和结果进行执行 颢子(1111)(22854705) 14:41:37回放 首先我们是要 验证脚本的正确性非洲黑驴(137655521) 14:42:09回放只能看execution log的结果,不能看别的吧 Empire上海(181491600) 14:42:27回放 只是真实的回放网络通信的内容 而没有相关的执行界面 库库熊(397491767) 14:42:29但是有的时候录制脚本是正确的但是回放的时候出现问题。这个和网络有关系吗? 颢子(1111)(22854705) 14:42:30然后 我们要通过回放 查看 执行的交易是否 已经正确执行 因为有的时候 我们回放后 在报告中 我们看到 全是pass 颢子(1111)(22854705) 14:42:46但是 实际上 并没有正确的执行完成 Empire上海(181491600) 14:42:55哦 非洲黑驴(137655521) 14:43:14没正确完成?那回放还有用吗?颢子(1111)(22854705) 14:43:26lr一般会把 500 404 等错误 进行解析 以今天的名义(23294949) 14:43:36可以看到界面的 非洲黑驴(137655521) 14:43:45有404这样的错误,也会pass 吗? 非洲黑驴(137655521) 14:43:56如何看到界面啊? 静虚(45457283) 14:44:39脚本的pass与事务的pass是两个不同的概念! 非洲黑驴(137655521) 14:45:10我都晕了 颢子(1111)(22854705) 14:45:31也就是说 当一个用户 登录 进行一个查找 但是他是非法用户 所以点击查找后 页面会返回一个 没有权限的错误页面 但是lr认为 正确返回 伊伊(95506563) 14:45:53为什么回放的时候已经把那个think time设置很长时间了,为何我们还是不能很清晰地看到它的 每个步骤? 非洲黑驴(137655521) 14:45:59这个不是可以设置rule的吗?颢子(1111)(22854705) 14:46:05所以 我们可以在 脚本中建立 检查点 对关键字 进行检索 保证 正确执行 Empire上海(181491600) 14:46:31嗯伊伊(95506563) 14:47:00是设置rule的值? 颢子(1111)(22854705) 14:47:03因为 run timeseting中 需要对 thinktime进行设置 颢子(1111)(22854705) 14:47:09也就是 在sunnyshinexm(641612117) 14:47:15这样看来,LR也可以当作功能测试工具用喽 颢子(1111)(22854705) 14:47:33run timeseting中 你可能选择了 忽略思考时间非洲黑驴(137655521) 14:47:56rule的值是想把正常的错误界面屏蔽掉,不作为错误来对待 颢子(1111)(22854705) 14:48:14实际上 qtp 和 lr 是两种不同的 录制理念 非洲黑驴(137655521) 14:48:19对了,我怎么把上一天录的脚和今天录的合到一起呀? 颢子(1111)(22854705) 14:48:39一个是根据 前台的插件 进行录制的 一个是 根据协议进行录制的 非洲黑驴(137655521) 14:48:59对了,我怎么把上一天录的脚和今天录的合到一起呀? 颢子(1111)(22854705) 14:49:08如果想把 两个脚本合在一起 很容易 直接拷贝到一个脚本中就好了 颢子(1111)(22854705) 14:49:33当然 你要确定好 被插入的脚本 及 被插入的位置 非洲黑驴(137655521) 14:49:51那action得改一下编号吧,例如action1 action2颢子(1111)(22854705) 14:50:13这个就是 我刚刚说的 在一个脚本中可以有多个action 非洲黑驴(137655521) 14:50:19按action合并不行吗 非洲黑驴(137655521) 14:50:48嗯,我把第二天的action改个序号,只要不和第一天的冲突,然后考过去,这样做行不? 颢子(1111)(22854705) 14:51:15你可以把 所有的录制脚本(交易) 放到一个action 中 也可以分别放到不同的 action中 颢子(1111)(22854705) 14:51:23可以得非洲黑驴(137655521) 14:51:41放一个action中我不知道往哪放啊 颢子(1111)(22854705) 14:52:17你要学会看脚本 对脚本的分析及理解 是非常有用的 非洲黑驴(137655521) 14:52:30好的 非洲黑驴(137655521) 14:52:49继续吧号子老师 Empire上海(181491600) 14:53:00试试 就知道 可以不了 非洲黑驴(137655521) 14:53:17嗯 颢子(1111)(22854705) 14:53:35把一个脚本 考到另一个脚本 有个问题 要注意 非洲黑驴(137655521) 14:54:04去头去尾颢子(1111)(22854705) 14:55:34有的人 习惯 用 tree方式对脚本进行 修改及插入检查点 Empire上海(181491600) 14:56:08什么 叫 tree 方式?颢子(1111)(22854705) 14:56:16但是 当你把 你那段脚本 以拷贝的方式 考到另一脚本中时 你就无法 使用tree的方式了 非洲黑驴(137655521) 14:56:53我不用tree方式的,这个可以避免了 颢子(1111)(22854705) 14:57:19因为 在录制脚本是 lr不但要抓住通信协议中的数据 还要在脚本中 记录镜像图片以今天的名义(23294949) 14:57:27你不是说你的脚本很长吗,不用tree多麻烦啊 非洲黑驴(137655521) 14:57:29为啥不让使用TREE方式了呢 颢子(1111)(22854705) 14:57:39web_submit_data(logon.jsf,Action=6/TLS/logon.jsf,Method=POST,TargetFrame=,RecContentType=text/html,Referer=6/TLS/logon.jsf,Snapshot=t84.inf,Mode=HTML, 非洲黑驴(137655521) 14:57:59哦,TREE是解决脚本长的问题的呀 颢子(1111)(22854705) 14:58:00例如 以上的脚本 Snapshot=t84.inf 就是个 快照 文件 非洲黑驴(137655521) 14:59:13为什么都有些Method=POST, Snapshot=t84.inf,之类的,到底有什么用啊 颢子(1111)(22854705) 14:59:34如果你拷脚本 那么你的快照就会丢失 当然也会有解决快照的方法 就是把 快照文件也移到 相应文件夹下 以今天的名义(23294949) 14:59:38不是,tree视图能够很方便的找到你要找的那个步骤,而在脚本里找就很麻烦了颢子(1111)(22854705) 15:00:24Snapshot=t84.inf 是个快照 你把它删除了 也不会影响 测试执行 非洲黑驴(137655521) 15:00:56哦颢子(1111)(22854705) 15:01:13Method=POST 是指 页面传输的方法 post 颢子(1111)(22854705) 15:01:27就是你向服务器 进行请求 非洲黑驴(137655521) 15:01:37嗯 颢子(1111)(22854705) 15:01:51Method=POST 你是不能删除的 颢子(1111)(22854705) 15:01:56好我们继续非洲黑驴(137655521) 15:02:29嗯,我知道,这是表单方式 非洲黑驴(137655521) 15:02:32继续 非洲黑驴(137655521) 15:02:35谢谢 颢子(1111)(22854705) 15:02:52在我们执行完 录制脚本后 并不是 脚本就一定能够执行 因为 在脚本中 我们有很多需要关联的 数值 非洲黑驴(137655521) 15:03:12号子,讲讲关联行不? 非洲黑驴(137655521) 15:03:22先给大体说下是干什么的行不? 颢子(1111)(22854705) 15:03:26在脚本中 一般 常用的 关联 有session_id task_id 还有内存地址 等等 非洲黑驴(137655521) 15:03:33 我强烈要求讲讲关联静虚(45457283) 15:03:49大家先听颢子老师讲,然后在自己动手操作一下,这样映像深一些。再把动手后的疑问提出来,由颢子老师再解答。如果这样本身对工具不熟悉,听一句问一句,即影响了大家听课,也妨碍了讲课的连贯性,自己的收获还不大! 非洲黑驴(137655521) 15:04:16好吧 非洲黑驴(137655521) 15:04:44可是不知道啥是关联,往下我还能听懂不 Empire上海(181491600) 15:05:45就相当于 各个表中 相关联的 属性 非洲黑驴(137655521) 15:06:02啊,明白了,谢谢颢子(1111)(22854705) 15:12:37所谓的关联(correlation)就是把脚本中某些写死的(hard-coded)资料,转变成是摘取自服务器所送的、动态的、每次都不一样的资料。举一个常见的例子,刚刚提到有些比较聪明的服务器,这些服务器在每个浏览器第一次跟它要资料时,都会在资料中夹带一个唯一的辨识码,接下来就会利用这个辨识码来辨识跟它要资料的是不是同一个浏览器。一般称这个辨识码为Session ID。 颢子(1111)(22854705) 15:13:08对于每个新的交易,服务器都会产生新的Session ID给浏览器。 颢子(1111)(22854705) 15:13:55因为VuGen 脚本还是用旧的Session ID向服务器请求,服务器会发现这个Session ID是失效的或是它根本不认识这个Session ID,当然就不会传送正确的网页资料给VuGen了。颢子(1111)(22854705) 15:15:25在 录制完脚本后 我们要对脚本进行关联 当然 现在lr可以自动关联 在这里 我不建议大家使用自动关联颢子(1111)(22854705) (2006-10-31 15:16:45)因为LR有一些关联规则,但是也不是关联就全是对的或者可靠的。颢子(1111)(22854705) 15:18:38些关联其实很简单 主要是我们要 找到需要关联的地方 颢子(1111)(22854705) 15:19:09我们常见的task_id session_id等 是比较容易找出来的 但对于 颢子(1111)(22854705) 15:20:02很多 关联中套用关联 我们需要认真地查找 颢子(1111)(22854705) 15:21:49关联会用到下列的函数:web_reg_save_param:这是最新版,也是最常用来做关联的函数。语法:web_reg_save_param ( “Parameter Name” , , LAST );颢子(1111)(22854705) 15:24:59在进行完关联后我们可以 再回放脚本 查看回放后是否正确执行 最好使用另一个用户进行登录回放 颢子(1111)(22854705) 15:25:30在脚本中 还有一个重点是 参数化 非洲黑驴(137655521) 15:28:35 颢子(1111)(22854705) 15:29:53突然有事 不能讲了 让义老师继续吧 对不起大家了 颢子(1111)(22854705) 15:30:05我要去开会了以今天的名义(23294949) 15:35:59参数化是指将脚本执行中一些需要变化的值作为参数,并提供给参数相应的值 以今天的名义(23294949) 15:37:28最简单的例子就是登录的用户名,在录制时我们输入一个用户名,脚本中这个用户名就写死了,如果不做参数化的话,是无法换一个用户登录的 以今天的名义(23294949) 15:39:33我们可以在脚本中选中这个用户名,点右键菜单中的replace with a parameter 以今天的名义(23294949) 15:41:01输入parameter name如userName,parameter type一般选择文件方式 以今天的名义(23294949) 15:43:15这时候点ok,用户名就被参数化了。所有的参数都可以在Param List中找到,我们可以在这里面修改参数的属性和值 非洲黑驴(137655521) 15:47:34下面是解答问题的时间了吗? 以今天的名义(23294949) 15:47:40在Param List选择一个参数,点击Edit with Notepad,显示的文本就是这个参数值的列表。比如我们要用100个不同的用户执行脚本,那么把这100个用户名放到这个文本里,每个用户名一行,注意最后一行后面一定要有一个回车。保存后关闭,这100个用户名就可以使用了 非洲黑驴(137655521) 15:47:47义老老师? 非洲黑驴(137655521) 15:47:57哦,对不起,问早了 以今天的名义(23294949) 15:48:29呵呵,打字慢了一点 非洲黑驴(137655521) 15:48:51休息一下, 伊伊(95506563) 15:49:11 以今天的名义(23294949) 15:49:13如果参数化这块你们有基本的了解,那就可以直接提问了 库库熊(397491767) 15:50:18为什么我参数化之后脚本出错的,就是通不过。 伊伊(95506563) 15:50:27我想让系统自动去建立100个用户,该如何设置 以今天的名义(23294949) 15:50:34参数化说简单也简单,只是把要用的值放到参数里去,关键是参数的使用策略 非洲黑驴(137655521) 15:50:57我问一下:如果参数化用的是数据库中的数据,那数据库中有10条记录 非洲黑驴(137655521) 15:51:38而我选择sequential方式 伊伊(95506563) 15:52:00义老师,能不能帮忙指点一下? 非洲黑驴(137655521) 15:52:01那如果用到第11个时,取不到数据了,那会不会出错 以今天的名义(23294949) 15:52:10伊伊 你录新建用户脚本时肯定要输入新建用户的用户信息,录制完成后把用户信息参数化一下就可以了 非洲黑驴(137655521) 15:53:02但如果想加1000个用户,那我在file里要写1000个参数吗?累了点 Empire上海(181491600) 15:53:34robot 里面 的 datapool 可以自动产生 我只知道 Empire上海(181491600) 15:53:57编个小程序 自动产生 应该也可以阿 以今天的名义(23294949) 15:54:20那要看建用户的要求了,如果用户名或用户id是定好的,必须把这1000个参数都放到参数列表里 非洲黑驴(137655521) 15:54:20可不可以把参数弄成公式的形式 伊伊(95506563) 15:54:47好的,知道了,谢谢义老师 非洲黑驴(137655521) 15:55:12我咋还没明白呢 以今天的名义(23294949) 15:55:19不客气 以今天的名义(23294949) 15:55:52你说公式的形式是什么意思,我没太明白 非洲黑驴(137655521) 15:56:09义老师,那按sequential方式取参数的话,数据库里的数据必须够多才行吧? 以今天的名义(23294949) 15:56:31不一定,可以循环使用 非洲黑驴(137655521) 15:56:35公司形式不说了,我也只是想的 非洲黑驴(137655521) 15:56:41哦,明白了,谢谢 非洲黑驴(137655521) 15:57:28义老师,如何去找关联啊 非洲黑驴(137655521) 15:57:38关联看上去很明显吗? 以今天的名义(23294949) 15:58:38不一定,找关联一个需要细心,一个需要经验 非洲黑驴(137655521) 15:59:17哦,那我等有点经给了再问吧,呵呵 以今天的名义(23294949) 16:00:26比如很明显的例子,打开一个页面,我需要点击第一个链接,那么我只要找到唯一标识这个链接的地址就行了 以今天的名义(23294949) 16:00:58把这个地址关联后,每次都会点第一个链接 非洲黑驴(137655521) 16:02:15我再消化一下 静虚(45457283) 16:02:43以老师才搞定一个特复杂的关联,是牛人。大家问,不要客气! 以今天的名义(23294949) 16:05:01不明显的也很多,可能一个链接中包含了登录用户的部门id,如果不关联的话就得不到正确的结果,那么我们就要去分析这个链接,看看那个值是需要关联的颢子(1111)(22854705) 16:06:27找关联 可以 再录制一个同样的脚本 使用不同的登录用户 然后 对两个脚本进行比较 然后 找出不同的部分 对这些不同的部分进行分析 是否需要关联 非洲黑驴(137655521) 16:07:21啊,明白了颢子(1111)(22854705) 16:09:35其实 关联做多了 录完脚本 有的很容易就找到了 对于比较长的数 要多留意 当然 还有别的 非洲黑驴(137655521) 16:11:46嗯 非洲黑驴(137655521) 16:11:50谢谢 非洲黑驴(137655521) 16:13:58参数化那块,当要取一个数据库的列做数据的话,那个打开数据库的语句和程序里用的一样吗? 非洲黑驴(137655521) 16:16:13conn.Open Provider=Microsoft.Jet.OLEDB.4.0;Jet OLEDB:Database Password=数据库密码;Data Source= & Server.MapPath(数据库名.mdb) 非洲黑驴(137655521) 16:16:19例如这个语句 颢子(1111)(22854705) 16:16:27不一定 有的时候 程序中的数据库连接 可是是动态 是根据不同的数据库自动拼成连接语句 非洲黑驴(137655521) 16:17:38LR中找开不同的数据库语句也不一样吧 颢子(1111)(22854705) 16:18:15是阿 jdbc 和 odbc 也不一样啊Dick (79027868) 16:20:02我个人感觉LR还是关联让人头痛 颢子(1111)(22854705) 16:20:02今天 就讲到这里吧 Dick (79027868) 16:20:41谢谢美女老师和义老师 Dick (79027868) 16:21:00 非洲黑驴(137655521) 16:21:03下课了吗?那可以开怀大笑了 颢子(1111)(22854705) 16:21:26其实 关联 需要细心 做多了 很多很容易就找到了 颢子(1111)(22854705) 16:21:43下课了 辛苦大家了 颢子(1111)(22854705) 16:22:08明天让 远老师讲吧 其实脚本这边 数据准备是非常关键的 颢子(1111)(22854705) 16:22:28有的是后 内存工作区 也是需要 参数化的颢子(1111)(22854705) 16:22:34有的时候 非洲黑驴(137655521) 16:23:44 喝口咖啡吧 颢子(1111)(22854705) 16:25:41内存的工作区 需要做参数化 因为 如果并发1000人同时使用一个内存工作区 很容易对系统的资源造成内存泄漏 等问题 颢子(1111)(22854705) 16:22:34有的时候 非洲黑驴(137655521) 16:23:44 喝口咖啡吧 颢子(1111)(22854705) 16:25:41内存的工作区 需要做参数化 因为 如果并发1000人同时使用一个内存工作区 很容易对系统的资源造成内存泄漏 等问题chunni(2394805) 16:33:01我想问一个简单的问题,用VB写脚本,应掌握VB的哪些具体东西,应熟悉到什么程度为好,我是还没有入门的人!伊伊(95506563) 16:35:41颢子老师,请教一下,我测C/S结构的应该选择哪个参数 chunni(2394805) 16:36:22没有人回答我的问题,太初级了?不要这样嘛! 颢子(1111)(22854705) 16:36:25其实 测试 脚本对编程要求并不是很高 但是需要了解 对程序 伊伊(95506563) 16:36:33 伊伊(95506563) 16:36:36哪一个? 颢子(1111)(22854705) 16:36:41对程序的基本常识知道那个使用就好了 chunni(2394805) 16:36:47掌握VB的哪些具体东西,应熟悉到什么程度为好 Dick (79027868) 16:36:58常用的语法至少要懂 chunni(2394805) 16:37:06这个明白 颢子(1111)(22854705) 16:37:20对 dick说得对 要对程序的语法有了解 chunni(2394805) 16:37:22现在我也在学和oadrunner Dick (79027868) 16:37:22脚本里面用的都是比较基础的语法颢子(1111)(22854705) 16:37:48选择那个参数没有明白你的意思 颢子(11

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论