官网:http://jmeter.apache.org/usermanual/

说明:十八元件、十九属性、二十函数,涉及清单内容暂未仔细阅读,个人觉得一是仅供使用参考,二是适合单独写文章来解读

一、让我们开始吧

  1. 千万不要在GUI模式下来做负载测试,要用CLI模式

  2. jmeter不带jdbc驱动程序,如果使用jdbc,就需要去网上下载,然后添加到classpath

  3. jmeter是100%的java应用程序

  4. 在jmeter的classpath中添加加密包,更新system.properties来注册ssl支持

  5. jmeter http默认协议级别为TLS,可以编辑修改:jmeter.properties或user.properties的https.default.protocol

  6. jmeter安装目录(XY是版本号)

    apache-jmeter-X.Y  # 可以修改根目录,不能修改子目录
    apache-jmeter-X.Y/bin
    apache-jmeter-X.Y/docs
    apache-jmeter-X.Y/extras
    apache-jmeter-X.Y/lib/
    apache-jmeter-X.Y/lib/ext
    apache-jmeter-X.Y/lib/junit
    apache-jmeter-X.Y/licenses
    apache-jmeter-X.Y/printable_docs
  7. bin目录

  8. 可以在bin目录下创建setenv.bat来配置jvm

    rem This is the content of bin\setenv.bat,
    rem it will be called by bin\jmeter.bat
    
    set JVM_ARGS="-Xms1024m -Xmx1024m -Dpropname=value"
  9. 可以配置环境变量

  10. 可以在启动jmeter直接指定环境变量

    JVM_ARGS="-Xms1024m -Xmx1024m" jmeter -t test.jmx [etc.]
  11. jmeter的类路径

    JMETER_HOME/lib (jmeter.properties的user.classpath可以设置)

    used for utility jars

    JMETER_HOME/lib/ext (jmeter.properties的search_paths可以设置)

    used for JMeter components and plugins

  12. jmeter只能找到.jar而不是.zip

  13. 执行java -jar时,设置的java环境变量classpath是不会起作用的,-jar就是牛

  14. 代理

    jmeter -E https -H my.proxy.server -P 8000 -u username -a password -N localhost

  15. HTTP Request Defaults和HTTP Request元件可以设置代理

  16. CLI模式

    jmeter -n -t my_test.jmx -l log.jtl -H my.proxy.server -P 8000

  17. 服务器模式

    jmeter-server -H my.proxy.server -P 8000

    server.exitaftertest = true可以设置在单个测试后退出服务器

    CLI模式运行

    jmeter -n -t testplan.jmx -r [-Gprop = val] [-Gglobal.properties] [-X]

  18. jmeter命令行设置properties

    jmeter -Duser.dir=/home/mstover/jmeter_stuff \
        -Jremote_hosts=127.0.0.1 -Ljmeter.engine=DEBUG

    jmeter -Ljmeter.engine = DEBUG
    jmeter -Lorg.apache.jmeter.engine = DEBUG
    jmeter -Lcom.example.foo = DEBUG
    jmeter -LDEBUG

  19. log4j2.xml位于bin目录下

  20. 要将org.apache.http的日志级别调到debug,加上

    <记录仪>
        <! -  SNIP  - >
        <Logger name =“org.apache.http”level =“debug”/>
        <! -  SNIP  - >
      </记录器>
  21. 命令行和属性文件的处理顺序

    1. -p propfile
    2. jmeter.properties (or the file from the -p option) is then loaded
    3. -j logfile
    4. Logging is initialised
    5. user.properties is loaded
    6. system.properties is loaded
    7. all other command-line options are processed
  22. 使用模板创建测试计划

二、创建测试计划

  1. 完整的测试计划包括:one or more Thread Groups, logic controllers, sample generating controllers, listeners, timers, assertions, and configuration elements

  2. "merge" "Save Selection As …" 右键选择这些选项,可以只加载/保存部分元件,而不用整个测试计划

  3. 再次强调!只能在调试测试计划时使用GUI模式,实际测试要使用CLI模式

  4. stop和shutdown的区别。

    stop:立即停止所有正在运行的线程
    shutdown:等待当前正在运行线程结束后,停止所有线程
  5. CLI模式,就使用bin目录下的stoptest[.cmd|.sh] or shutdown[.cmd|.sh]

  6. jmeter.log记录了日志

三、测试计划的元件

  1. 最小的测试包括测试计划、线程组、采样器

  2. Functional Test Mode,意思是说,在listener选择了保存文件的情况下,勾选上这个复选框,就会把返回数据保存到文件中去

  3. 可以在listener中点击Configure来选择保存的字段

  4. 所有控制器和采样器必须位于线程组下,而listener可以放在测试计划下,作用于所有线程组

  5. 线程组可以设置3项:the number of threads, the ramp-up period,the number of times to execute the test

  6. 线程组的Scheduler可以配置Startup Delay (seconds)Duration (seconds)

  7. 采样器就是用来发请求的

  8. HTTP Cookie Manager应该添加到所有的web测试中,否则jmeter将会忽略cookie

  9. 加载搜索,搜索“A”,加载搜索,搜索“B”,可以用Interleave Controller来实现

  10. HTTP Request Defaults可以在多个http请求中共享同样的请求信息

    HTTP采样器中需要共享的就留空

  11. 所有的listener都保存相同的数据,只是展示的不同而已

  12. timers = time.sleep()

  13. 断言是适用于范围内的,如果要断言单个sampler,则需要添加为sampler的子级

  14. 执行顺序

  15. 有sampler才会执行Pre-Processors Timers Post-Processors Assertions

  16. 执行顺序示例

  17. 严格分层的元件:Listeners, Config Elements, Post-Processors, Pre-Processors, Assertions, Timers

    有序的元件:controllers, samplers

  18. Assertions Timers分层示例

    更复杂的

  1. 变量和属性都区分大小写

  2. 如果线程更新变量,则仅更改变量的线程副本

  3. 使用属性来定义变量的值

四、创建测试计划-Web

  1. 使用测试计划的第一步就是,创建线程组
  2. Ramp-Up Period是指启动用户的总耗时,eg1:设置为0则立即启动所有用户,eg2:5个用户设置为5s则每1s启动1个用户
  3. HTTP Request Defaults不会发请求,只是设置默认值
  4. 如果有cookie,添加HTTP Cookie Manager就完事
  5. 测试计划的图标线程组的图标

五、创建测试计划-高级Web

  1. 在不能确定浏览器是否支持Cookie的情况下,采用url重写来传session id

  2. jmeter可以用HTTP URL Re-writing Modifier来支持

​ 这样就会把session id添加到每个请求中。

​ Path Extension:session id作为path一部分,用;分隔

​ Cache Session Id?:保存最后找到的session id,如果前一个http请求没有session id,那么就用缓存这个

  1. HTTP Header Manager和HTTP Cookie Manager一般都添加在线程组级别,也就是在线程组右键添加

六、创建测试计划-数据库

  1. 数据库驱动程序需要放到 ./lib 目录,如mysql-connector-java-XXX-bin.jar

  2. JDBC Connection Configuration配置了数据库连接,JDBC Request是sql请求,二者通过Variable name bound to pool来绑定关联

七、创建测试计划-FTP

  1. FTP Request Defaults也是用来设置默认值的

  2. 示例

八、创建测试计划-LDAP、扩展LDAP

  1. LDAP(Light Directory Access Portocol)轻量级目录访问协议

  2. 4个LDAP请求示例:http://jmeter.apache.org/usermanual/build-ldap-test-plan.html

  3. 9个LDAP请求示例,http://jmeter.apache.org/usermanual/build-ldapext-test-plan.html

九、创建测试计划-Webservice

  1. FileTemplates…选择Building a SOAP Webservice Test Plan,按模板创建
  2. 添加路径,修改HTTP Header Manager
  3. http://jmeter.apache.org/usermanual/build-ws-test-plan.html

十、创建测试计划-JMS点对点

  1. 把jar放入JMeter的lib目录后,需要重启JMeter

  2. AddListenerGraph Results

  3. http://jmeter.apache.org/usermanual/build-jms-point-to-point-test-plan.html

十一、创建测试计划-JMS主题

  1. JMeter会自动保存在控制面板所做的更改
  2. http://jmeter.apache.org/usermanual/build-jms-topic-test-plan.html

十二、监听器

  1. 输出类型有树、表、图形、日志文件

  2. csv文件比xml文件小得多,如果要生成大量数据,请使用csv

  3. 相对路径是相对于当前工作目录,默认为bin/目录

  4. 如果路径以“~/”开头(或jmeter.save.saveservice.base_prefix JMeter属性中的任何名称),则是相对于当前测试计划(jmx文件)所在目录的路径

  5. 如果仅希望记录某些样本,则将监听器添加为采样器的子节点。或者,可以使用“简单控制器”对一组采样器进行分组,然后向其添加“监听器”。多个采样器可以使用相同的文件名-但请确保它们都使用相同的配置!

  6. jmeter.properties(或user.properties)可以配置默认保存项

  7. jmeter.save.saveservice.output_format若设置为csv,那么default_delimiter要设置为逗号","

  8. 配置说明

    #------------------------------------------------- --------------------------
    #结果文件配置
    #------------------- -------------------------------------------------- ------ 
    
    #本部分有助于确定如何保存结果数据。
    #注释掉的值是默认值。
    
    #合法值:xml,csv,db。当前仅支持xml和csv。
    #jmeter.save.saveservice.output_format = csv 
    
    #应该保存字段时为true;否则为false 
    
    #assertion_results_failure_message只影响CSV输出
    #jmeter.save.saveservice.assertion_results_failure_message =真
    #
    #合法值:无,首先,所有
    #jmeter.save.saveservice.assertion_results =无
    #
    #jmeter.save.saveservice.data_type = true
    #jmeter.save.saveservice.label = true
    #jmeter.save.saveservice.response_code = true
    #CSV输出当前不支持response_data
    #jmeter.save.saveservice.response_data = false
    #将ResponseData保存为失败的样本
    #jmeter.save.saveservice.response_data.on_error = false
    #jmeter.save.saveservice.response_message = true
    #jmeter.save.saveservice.successful = true
    #jmeter.save.saveservice.thread_name = true
    #jmeter。 save.saveservice.time = true
    #jmeter.save.saveservice.subresults = true
    #jmeter.save.saveservice.assertions = true
    #jmeter.save.saveservice.latency = true
    #jmeter.save.saveservice.connect_time = true
    #jmeter.save.saveservice.samplerData = false
    #jmeter.save.saveservice.responseHeaders = false
    #jmeter.save.saveservice.requestHeaders = false
    #jmeter.save.saveservice.encoding = false
    #jmeter.save.saveservice.bytes = true
    #jmeter.save.saveservice.sent_bytes = true
    #jmeter.save.saveservice.url = false
    #jmeter.save.saveservice.filename = false
    #jmeter.save.saveservice.hostname = false
    #jmeter.save.saveservice.thread_counts = true
    #jmeter.save.saveservice.sample_count = false
    #jmeter.save.saveservice.idle_time = true 
    
    #时间戳格式-仅影响CSV输出文件
    #合法值:无,ms或适用于SimpleDateFormat的格式
    #jmeter.save.saveservice.timestamp_format = ms
    #jmeter.save.saveservice.timestamp_format = yyyy / MM / dd HH:mm:ss.SSS 
    
    #用于逗号分隔值(CSV)文件或其他格式
    #字段'值由指定的分隔符分隔。
    #默认值:
    #jmeter.save.saveservice.default_delimiter =,
    #对于TAB,由于JMeter 2.3可使用:
    #jmeter.save.saveservice.default_delimiter = \ t 
    
    #仅适用于CSV格式文件:
    #将字段名称打印为第一行在CSV中
    #jmeter.save.saveservice.print_field_names = true 
    
    #JMeter变量名称的可选列表,其值将保存在结果数据文件中。
    #使用逗号分隔名称。例如:
    #sample_variables = SESSION_ID,REFERENCE
    #NB当前的实现将XML值保存为属性,
    #因此名称必须是有效的XML名称。
    #JMeter将变量发送到所有服务器
    #以确保客户端上可获得正确的数据。
    
    #文件
    第2行的可选xml处理指令:#jmeter.save.saveservice.xml_pi = <?xml-stylesheet type =“ text / xsl” href =“ sample.xsl”?> 
    
    #用于标识文件名的前缀相对于当前基准
    #jmeter.save.saveservice.base_prefix =〜/ 
    
    #用XML或CSV输出编写的每一行上的AutoFlush
    #设置为true可以减少测试结果数据丢失(如果发生崩溃)
    #但会影响性能,特别是对于密集测试(低暂停或无暂停)
    #从JMeter 2.10开始,默认情况下为假
    #jmeter.save.saveservice.autoflush = false 
    
    #将开始时间戳记记入日志,而不是结束
    sampleresult .timestamp.start = true 
    
    #是否使用System.nanoTime()-否则仅使用System.currentTimeMillis()
    #sampleresult.useNanoTime = true 
    
    #使用后台线程计算nanoTime偏移量
    #将此值设置为≤0 可禁用背景线程
    #sampleresult.nanoThreadSleep = 5000
  9. SimpleDateFormat:https://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html

  10. CLI模式下,-1 可以用于创建顶级监听器,一般用来为每次运行指定不同的数据和日志文件。因为默认是写入jmeter.log文件,所以如果要重命名,需要使用 -j

    jmeter -n -t testplan.jmx -l testplan_01.jtl -j testplan_01.log
    jmeter -n -t testplan.jmx -l testplan_02.jtl -j testplan_02.log
  11. 为每次测试运行生成唯一的名称:log_file = 'jmeter_'yyyyMMddHHmmss'.tmp'

  12. 大多数监听器都会保留它们显示的样本的副本,除了

    • Simple Data Writer
    • BeanShell/JSR223 Listener
    • Mailer Visualizer
    • Monitor Results
    • Summary Report

    这2个使用的内存更少:

    • Aggregate Report
    • Aggregate Graph

    如果需要保存大量数据,请使用Simple Data Writer + csv

  13. csv,xml,sample attribute配置说明http://jmeter.apache.org/usermanual/listeners.html

  14. 可以使用Save_Responses_to_a_file,为每个样本生成一个新文件

  15. 为了正确解析无标题的csv文件,必须设置适当的jmeter属性

  16. 可以通过EditSave Node As Image把监听器保存为PNG文件

十三、远程测试

  1. 从单个JMeter客户端控制多个远程JMeter引擎

  2. jmeter客户端的实例可以控制任意数量的远程jmeter实例

  3. 所有服务器都运行相同的测试计划,这意味着,如果设置了1000个线程,有6台jmeter服务器,那么将运行6000个线程

  4. 推荐将一台或多台计算机,与配置为运行jmeter engine的应用服务器,位于同一以太网段上,这将最大程度减少网络对测试结果的影响,而且不会影响应用服务器本身的性能

  5. 需确保多台服务器的jmeter和java版本完全相同

  6. 启动服务器组件

    JMETER_HOME/bin/jmeter-server (unix)
    JMETER_HOME/bin/jmeter-server.bat (windows) 
  7. 添加服务器ip

    JMETER_HOME/bin/jmeter.properties
    remote_hosts

    也可以通过-R来指定

    jmeter -Rhost1,127.0.0.1,host2
  8. 通过新菜单来启动/停止

  9. CLI模式启动远程

    jmeter -n -t script.jmx -r  # 从remote_hosts读取
    jmeter -n -t script.jmx -R server1,server2,…  # 指定
  10. 生成密钥的脚本,默认密码为'changeit'

    bin/create-rmi-keystore.bat  # windows
    bin/create-rmi-keystore.sh  # unix

    生成rmi_keystore.jks,复制到jmeter/bin目录或在server.rmi.ssl.keystore.file中引用它

  11. 默认情况下,jmeter使用标准rmi端口1099

  12. 处理启动失败的节点

    client.tries
    client.retries_delay
    client.continue_on_fail = true
  13. java有安全管理器概念,它会在执行潜在危险操作前(如解析主机名,创建或读取文件在OS中执行命令),被JVM询问,可以通过java.security.managerjava.security.policy来启用安全管理器

十四、Dashboard报表

  1. dashboard是jmeter的模块化扩展,默认会从csv读取数据,生成html报告

  2. 提供的内容见http://jmeter.apache.org/usermanual/generating-dashboard.html

  3. 可以在reportgenerator.properties中找到相关属性,要自定义这些属性,需要复制到user.properties文件中并进行修改

  4. 所有属性必须以jmeter.reportgenerator开头,图属性必须以jmeter.reportgenerator.graph开头,导出属性必须以jmeter.reportgenerator.exporter开头

  5. 过滤机制是正则匹配的

  6. 生成报告的方式

    CLI:

    # 从现有csv文件生成报告
    jmeter -g <log file> -o <Path to output folder>
    # 测试结束后自动生成
    jmeter -n -t <test JMX file> -l <test log file> -e -o <Path to output folder>

    GUI:

    Tools → Generate HTML report

  7. 默认生成目录为${JMETER_HOME}/bin/report-output

  8. 报告生成超时设置generate_report_ui.generation_timeout

十五、实时结果

  1. 通过实现AbstractBackendListenerClient类,把实时结果发给后端
  2. 线程指标、响应时间指标
  3. 使用InfluxDBBackendListenerClient 添加一个BackendListener,使用CLI连接到InfluxDB
  4. 还可以配置Grafana
  5. http://jmeter.apache.org/usermanual/realtime-results.html

十六、最佳实践

  1. 使用最新版本,jmeter的性能一直在优化

  2. 合理的线程数,过多可以考虑分布式多台服务器

  3. cookie manager的位置

  4. authorization manager的位置

  5. 使用HTTP(S) Test Script Recorder

  6. 使用用户变量参数化

  7. 减少资源的建议,很重要

    使用CLI模式 jmeter -n -t test.jmx -l test.jtl

    去掉无用的监听器

    实际运行测试时,去掉察看结果树,仅在调试时使用

    太多相同的采样器,建议改成循环

    不要使用功能模式

    输出csv而不是xml

    只保存需要的数据

    尽可能少的断言

  8. BeanShell服务器

  9. vars.get()和vars.put(),访问jmeter变量,作用范围是线程内

  10. 线程间共享变量

    方式1

    import org.apache.jmeter.util.JMeterUtils;
    String value = JMeterUtils.getPropDefault("name","");
    JMeterUtils.setProperty("name", "value");

    方式2

    if (bsh.shared.myObj == void){
        // not yet defined, so create it:
        myObj = new AnyObject();
    }
    bsh.shared.myObj.process();
  11. CLI模式下可以通过属性来参数化变量

    LOOPS=${__P(loops,10)}  # 默认10
    jmeter … -Jloops=12 …  # 指定12
  12. 属性对于jmeter实例是全局的

  13. 修改属性时,不要修改jmeter.properties文件,而是从jmeter.properties中复制属性到user.properties,这样方便升级到下个版本时,直接拿来用

十七、帮帮忙!老板想让我给webapp做负载测试

  1. 需要思考:平均用户数、高峰用户数、压测时机、应用程序状态、测试目的
  2. 网络和应用资源
  3. 操作系统

十八、元件参考

  1. jdbc的sql不要输入分号
  2. 元件清单:http://jmeter.apache.org/usermanual/component_reference.html

十九、属性参考

  1. 重启jmeter,加载类时,才会解析属性
  2. 属性列表:http://jmeter.apache.org/usermanual/properties_reference.html

二十、函数

  1. 函数调用

    ${__functionName(var1,var2,var3)}
  2. 注意\转义参数中的逗号

  3. jmeter会将${x}中x的空格自动删除

  4. 属性使用**__P** or **__property**函数引用

  5. 函数有2种,变量和内置函数

  6. 函数在线程之间共享

  7. 有些字段不允许随机字符串,它们需要数字,不接受函数

  8. 要注意${}两边的引号,比如接口参数、sql

  9. 函数名称以"**__**"开头

  10. 如果函数不带参数,可以省略括号,这操作666,跟编程语言有明显差异

  11. 查看变量的值,**__logn()**函数或Debug Sampler,还可以建一个包括变量引用的Java Request sampler,在listener中查看

  12. 自定义变量会覆盖同名的内置函数

  13. The Function Helper Dialog

  14. 内置函数说明:http://jmeter.apache.org/usermanual/functions.html

  15. 预定义变量COOKIE_cookiename JMeterThread.last_sample_ok START

  16. 预定义属性START.MS START.YMD START.HMS TESTSTART.MS

二十一、正则表达式

  1. 添加Debug Sampler和Tree View Listener,可以用来测试正则

  2. View Results Tree包含RegExp Tester

  3. 包含是指正则表达式是其中一部分,匹配是指全部匹配,例如alphabet包含ph.b.,匹配al.*t,注意alp|.lp.*是包含而不是匹配,因为alp包含后不会再继续寻找了

  4. ^表示非,一个例子

    name="file" value="([^"]+)">
    [^"]表示除"以外的任何
  5. . 任何

    + 一个或多个

    ? 非贪婪

二十二、提示与技巧

  1. jmeter的变量是线程作用域,要共享线程变量,一属性,二文件(Save Responses to a file或BeanShell写文件,HTTP Sampler "file:" protocol或BeanShell读)

  2. 调试日志选项

    jmeter.loggerpanel.display = true
  3. 通过菜单的搜索,搜索树中元件

  4. jmeter会为每个jmx备份10个文件在$ {JMETER_HOME} / backups,相关属性

    jmeter.gui.action.save.backup_on_save = false
    jmeter.gui.action.save.backup_directory=/path/to/backups/dir
    jmeter.gui.action.save.keep_backup_max_hours=0
    jmeter.gui.action.save.keep_backup_max_count=10
  5. gui.quick_*属性用于设置键盘快捷键

版权申明:本文为博主原创文章,转载请保留原文链接及作者。

点读系列《jmeter官方用户手册》的更多相关文章

  1. 读《流畅的python》第一天

    1.跟运算符无关的特殊方法了解: 2.跟运算符相关的特殊方法了解: 3.内置的序列类型分类: 容器序列 list.tuple 和 collections.deque 这些序列能存放不同类型的数据. 扁 ...

  2. [读书笔记]流畅的Python(Fluent Python)

    <流畅的Python>这本书是图灵科技翻译出版的一本书,作者Luciano Ramalho. 作者从Python的特性角度出发,以Python的数据模型和特殊方法为主线,主要介绍了pyth ...

  3. 流畅的python(笔记)

    流畅的python中有很多奇技淫巧,整本书都在强调如何最大限度地利用Python 标准库.介绍了很多python的不常用的数据类型.操作.库等,对于入门python后想要提升对python的认识应该有 ...

  4. 流畅的python 对象引用 可变性和垃圾回收

    对象引用.可变性和垃圾回收 变量不是盒子 人们经常使用“变量是盒子”这样的比喻,但是这有碍于理解面向对象语言中的引用式变量.Python 变量类似于 Java 中的引用式变量,因此最好把它们理解为附加 ...

  5. 一篇夯实一个知识点系列--python生成

    写在前面 本系列目的:一篇文章,不求鞭辟入里,但使得心应手. 迭代是数据处理的基石,在扫描内存无法装载的数据集时,我们需要一种惰性获取数据的能力(即一次获取一部分数据到内存).在Python中,具有这 ...

  6. 《流畅的python》读书笔记

    流畅的python 第1章 python数据模型 ---1.1 一摞Python风格的纸牌 特殊方法,即__method__,又被称为魔术方法(magic method)或者双下方法(dunder-m ...

  7. python人工智能爬虫系列:怎么查看python版本_电脑计算机编程入门教程自学

    首发于:python人工智能爬虫系列:怎么查看python版本_电脑计算机编程入门教程自学 http://jianma123.com/viewthread.aardio?threadid=431 本文 ...

  8. 《流畅的Python》一副扑克牌中的难点

    1.现在在看<流畅的Python>这本书,看了三页就发现,这本书果然不是让新手来入门的,一些很常见的知识点能被这个作者玩出花来, 唉,我就在想,下面要分析的这些的代码,就算我费劲巴拉的看懂 ...

  9. 《流畅的Python》Object References, Mutability, and Recycling--第8章

    Object References, Mutability, and Recycling 本章章节: Variables Are Not Boxes identity , Equality ,  Al ...

  10. 《流畅的Python》 第一部分 序章 【数据模型】

    流畅的Python 致Marta,用我全心全意的爱 第一部分 序幕 第一章 Python数据模型 特殊方法 定义: Python解释器碰到特殊句法时,使用特殊方法激活对象的基本操作,例如python语 ...

随机推荐

  1. git 多个远程仓库

    有时候一个git项目需要使用多个远程库,如:测试环境+生产环境,国内加国外等 项目根目录下修改 .git/config 文件 vim .git/config 新增远程一个远程仓库   并为其命名 :如 ...

  2. Maven Could not open ServletContext resource [/WEB-INF/applicationContext.xml]

    因此:maven中,配置文件的读取应有下列红字两部分,缺一不可. 不是maven项目时,可以都不写........ <context-param> <param-name>co ...

  3. 正则search与match的区别

    import re # #1.search和match的区别 # pattern = re.compile(r'\d+') # #match从头开始匹配 # m = pattern.match('on ...

  4. python类与对象

    1.  class命名规范:首字母大写,驼峰命名法 2.  class 里面函数括号里面带(self)说明这是一个实例,调用实例方法需要用实例调用 class Teacher: def  test_1 ...

  5. python-javascript之dom

    DOM DOM:(document object mode)文档对象模型.DOM为文档提供了结构化表示,并定义了如何通过脚本来访问文档结构. 目的就是为了能让js操作html元素而制定的一个规范 DO ...

  6. web前端知识体系大全【转载】

    自己总结的web前端知识体系大全[欢迎补充]   1. 前言 大约在几个月之前,让我看完了<webkit技术内幕>这本书的时候,突然有了一个想法.想把整个web前端开发所需要的知识都之中在 ...

  7. Dubbo 系列(07-2)集群容错 - 服务路由

    目录 Dubbo 系列(07-2)集群容错 - 服务路由 1. 背景介绍 1.1 继承体系 1.2 SPI 2. 源码分析 2.1 创建路由规则 2.2 RouteChain 2.3 条件路由 Dub ...

  8. es6 Promise.reject()方法

    es6 Promise.reject()方法:https://blog.csdn.net/ixygj197875/article/details/79188195

  9. java虚拟机规范(se8)——class文件格式(五)

    4.7.1 定义和命名新属性 允许编译器定义和发布的class文件在class文件结构体.field_info结构体.method_info结构体和Code结构体中的attributes表中包含新的属 ...

  10. 选择 NoSQL 需要考虑的 10 个问题

    那么我为什么要写这篇文章呢? 是因为我认为NoSQL解决方案不如RDBMS解决方案吗?当然不! 是因为我专注于SQL的做事方式,而不想陷入一种相对较新的技术的不确定性吗?不,也不是!事实上,我非常兴奋 ...