无论是性能测试还是自动化测试,变量(参数化)都很重要。 即使有这样的接口,开发也一定会被缓存阻止,因为在实际环境中,并发性很高,而且很少所有参数都要求相同。 这种常见情况不是瓶颈,如果真正的瓶颈同时发生同一接口的不同参数,则无法缓存,只要命中数据库或程序,就容易成为瓶颈。 因此,在进行性能测试时,使用参数的变量赋值很重要。 Gatling本身是基于Scala编写的,支持JAVA库,所以它的用例既可以支持Scala语法,也可以支持JAVA的庞大函数,功能非常强大。 很遗憾,我对Scala和JAVA都不了解,所以只能简单说明变量在Gatling中的使用方法。
使用变量必须明确“从哪里来,去哪里”的问题。
从哪里来
Gatling变量的值至少具有以下源:
1、using Feeders——文件、数据库
2、extractingdatafromresponsesandsavingthem,e.g.withhhttpcheck’SSA veas ——从要求的返回值中提取内容并保存
3、虽然manually with the Session API——由各种java提供的函数生成,但是缺点可能会稍微影响性能
前面两种,大家使用的时候参考官网说明就可以了,这里只谈第三种。
到哪里去
以http请求为例,可以使用变量的地方一般是请求的URL、请求本身,但其他协议的请求未必只有这两种。
代码
在此示例中,实现了对http请求的测试,要求body、url均包括随机数。 评论很多是因为我对scala和java不熟悉。 让我们来看看。 请参阅。 请参阅。
packagecomputerdatabaseimportio.Gatling.core.predef._ import io.Gatling.http.predef._ import Scala.concur rencur 将随机数classbasicsimulationextendssimulation { defgetrand (I : int ) : string=thread local random.current.nextint ) I } (10000000 ) /定义一般意义上的“变量”,然后定义valhttpconf=http.base URL (http://192.168.0.11 )/hereistherootforallrelatiotion q=0.8 ‘ ).donottrackheader(‘1’ ).acceptlanguageheader ) en-us,en; q=0.5 ‘ ).acceptencodingheader(gzip,deflate ).useragentheader ) Mozilla/5.0 ) Macintosh; 英特尔MACOSx10.8; RV :16.0 (gecko/2010 01 01 Firefox/16.0 ) val headers _1=map (content-type ‘-‘ application/x-www-form ) x-ww-form ) valSCN=scenario(Hellogatling )//ascenarioisachainofrequestsandpauses//exec ) session=session.set 不能用randnum代替getrand ) 1000000 )。 否则,这只会被计算一次。 exec(_.set )、getrand )、() 000000 ) ) /。 可怕的scala语法. exec ) _.set (、(r )、((()、) ) )、)。 请参阅。 exec(http(post’sexample ) )/here ‘ sanexampleofapostrequest.post )/API/getconf.Json? mid=${RAND}ver=1.0 ‘ )在URL中使用变量。 如果在一个请求中多次调用${RAND},则每次调用的结果都相同,但每次jmeter函数的///.post((/API/getconf.) )都会发生变化,mid=’getrand(1000000 ) headers(headers_1).body(stringbody ) ‘ ‘ {‘audit_control_list’: )。 $ { rand } ” ” ).asJSON/body使用变量,因为它包含字符串“”(“.”),所以其他结果(如getrand(10000000 )只需直接输出该字符串。 //.body ) )。 _=这个符号表示scala的模式匹配公式,是为了在每次循环时计算新的随机数,使用方法不顺利。 请参阅。 请参阅。 //body(stringbody(dsds ) _=getrand(10000000 ) ) /相反,这样写是不行的//. body (string body ) dsds${rand} ) getrand ) 10000000 ),则在测试时生成随机数. queryparam(‘name ‘, 只为“${RAND}生成一次的转载请注明出处(setup(SCN.inject ) atonceusers(10 ) ).protocols (http conf ) ) 虽然很遗憾,但我希望你有能力
Gatling官方网站帮助: http://gatling.io/#/docs
Gatling的谷歌论坛: https://groups.google.com/forum/#! topic/gatling/8KVMX8k1eD8
转载于:https://www.cn blogs.com/id beta/p/5109508.html