jenkins+jmeter+ant自动化接口测试集成

搭建环境(JDK、Ant、Jmeter、Jenkin最近版本):

JDK:jdk1.8.0_60

Ant:apache-ant-1.10.2

Jmeter: apache-jmeter-3.0

Jenkins:Jenkins 2.88

1、JDK的安装

双击JDK安装包,选择安装路径C:\Progrom Files\Java\jdk1.8.0_60路径下);

 


1)系统变量→新建 JAVA_HOME 变量 。

变量值填写jdk的安装目录(本人是 C:\Progrom Files\Java\jdk1.8.0_60);

 

2)系统变量→寻找 Path 变量→编辑

在变量值最后输入 %JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;

(注意原来Path的变量值末尾有没有;号,如果没有,先输入;号再输入上面的代码)

 

3)系统变量→新建 CLASSPATH 变量

变量值填写 .;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar (注意最前面有一点)

系统变量配置完毕

4)检验是否配置成功 运行cmd 输入 java -version (java 和 -version 之间有空格)

 

2、jmeter安装

1)解压apache-jmeter-3.0.zip到D:\Progrom Files目录下。

 

2)将以下两个文件夹下的插件拷贝到D:\Progrom Files\apache-jmeter-3.0\lib\ext目录下

 

 

3)环境变量配置


a、 设置环境变量,新建系统变量在变量名中输入:JMETER_HOME,变量值中输入:D:\Progrom Files\apache-jmeter-3.0,点击确定即可。

b、在环境变量CLASSSPATH中添加%JMETER_HOME%\lib\ext\ApacheJMeter_core.jar;%JMETER_HOME%\lib\jorphan.jar;

%JMETER_HOME%\lib\logkit-2.0.jar;(注意:你要看下你的是不是logkit-2.0这个版本).

c、 检验是否配置成功 运行cmd 输入 jmeter -v (jmeter和 -v 之间有空格)

若如图所示 显示版本信息 则说明安装和配置成功。

 

3、安装ant

1)解压apache-ant-1.10.2.zip到D:\Progrom Files目录下;

 

2)配置环境变量

a、新建以下环境变量

ANT_HOME:D:\Progrom Files\apache-ant-1.9.7,此为你的ANT安装路径;

b、在环境变量PATH的最后面添加一下内容:

;%ANT_HOME%\bin 注意前面的分号,如果PATH中最后没有分号";"的话要加上,有的话就可去除。

c、进入cmd命令窗口,在CMD窗口中输入ant -version,敲击回城键,会显示出你安装的ANT版本,如果成功显示,说明你的配置应该是成功了。

 

3)本地调试使用ant构建运行Jmeter,并且生成jtl、Html报告;


jmeter默认保存的是.csv格式的文件,所以我们先要设置一下bin/jmeter.properties文件内容,修改jmeter.properties文件 jmeter.save.saveservice.output_format=xml;
将apache-jmeter-3.0\extras\ant-jmeter-1.1.1.jar拷贝到apache-ant-1.10.2\lib目录下;
配置D:\Program Files\apache-jmeter-3.0\extras目录下build.xml文件
build文件配置

<?xml version="1.0" encoding="UTF-8"?>
<project name="ant-jmeter-test" default="run" basedir=".">
<taskdef resource="net/sf/antcontrib/antlib.xml" />
<!-- (1)需要改成自己本地的 Jmeter 目录-->
<property name="jmeter.home" value="D:\Program Files\apache-jmeter-3.0"/>
<property name="report.title" value="report"/>
<!-- (2)jmeter生成jtl格式的结果报告的路径-->
<property name="jmeter.result.jtl.dir" value="D:\Program Files\apache-jmeter-3.0\reports\jtl"/>
<!-- (3)jmeter生成html格式的结果报告的路径-->
<property name="jmeter.result.html.dir" value="D:\Program Files\apache-jmeter-3.0\reports\html"/>
<!-- 生成的报告的前缀 -->
<property name="ReportName" value="TestReport"/>
<property name="jmeter.result.jtlName" value="${jmeter.result.jtl.dir}/${ReportName}.jtl"/>
<property name="jmeter.result.htmlName" value="${jmeter.result.html.dir}/${ReportName}.html"/>

<target name="run"> 
<antcall target="test"/> 
<antcall target="report"/> 
<!--antcall target="mail"/--> 
</target>
<target name="test"> 
<taskdef name="jmeter" classname="org.programmerplanet.ant.taskdefs.jmeter.JMeterTask"/> 
<jmeter jmeterhome="${jmeter.home}" resultlog="${jmeter.result.jtlName}"> 
<!-- (4)build.xml的存放的路径-->
<testplans dir="D:\Program Files\apache-jmeter-3.0\demo" includes="*.jmx"/> 
<property name="jmeter.save.saveservice.output_format" value="xml"/> 
</jmeter> 
</target>
<path id="xslt.classpath"> 
<fileset dir="${jmeter.home}/lib" includes="xalan*.jar"/> 
<fileset dir="${jmeter.home}/lib" includes="serializer*.jar"/> 
</path>
<target name="report"> 
<tstamp> 
<format property="report.datestamp" pattern="yyyy/MM/dd HH:mm"/>
</tstamp> 
<xslt 
classpathref="xslt.classpath" 
force="true" 
in="${jmeter.result.jtlName}"
out="${jmeter.result.htmlName}"
style="${jmeter.home}/extras/jmeter-results-detail-report.xsl"> 
<param name="dateReport" expression="${report.datestamp}"/> 
</xslt> 

<copy todir="${jmeter.result.html.dir}"> 
<fileset dir="${jmeter.home}/extras"> 
<include name="collapse.png"/> 
<include name="expand.png"/> 
</fileset> 
</copy> 
</target>
<path id="lib_classpath">
<fileset dir="${basedir}/">
<include name="mail*.jar" />
<include name="activation*.jar" />
<include name="commons-email*.jar" />
<include name="ant-contrib*.jar" />
</fileset>
</path>
<!--target name="mail">
<for list="[email protected]" param="tmp" >
<sequential>
<echo>message @{tmp}</echo> 
<mail mailhost="smtp.thunisoft.com" mailport="25" ssl="false" subject="ant mail" messagemimetype="text/html" user="zhangjn" password="*******" tolist="@{tmp}">
<from address="[email protected]" />
<fileset dir="${jmeter.result.html.dir}">
<include name="*.html" />
<include name="*.png" />
</fileset>
<message>支持多人同时发邮件!!<br /><br /></message>
</mail>
</sequential>
</for>
</target-->
</project>

  

备注:注释中的(1)(2)(3)(4)该成自己的路径;jmeter-results-detail-report.xsl这个配置值在你的

${jmeter.home}/extras目录下是不是这个名称,配置改成你对应的名称就可以了;把build.xml文件放到(4)中配置的这个路径中
D:\Program Files\apache-jmeter-3.0\demo,并把要执行的脚本也放到同一目录下,如图:


5、cmd到demo的目录下执行ant命令,如图:

 

以上说明执行成功了,到你配置的报告目录下去看生成的报告D:\Program Files\apache-jmeter-3.0\reports\html

 

备注:如果生成的报告为空的,可能是你的jmeter-results-detail-report.xsl配置有问题可以参考一下配置:

<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">

<!--
Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements. See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The ASF licenses this file to You under the Apache License, Version 2.0
(the "License"); you may not use this file except in compliance with
the License. You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->

<!-- 
Stylesheet for processing 2.1 output format test result files 
To uses this directly in a browser, add the following to the JTL file as line 2:
<?xml-stylesheet type="text/xsl" href="../extras/jmeter-results-detail-report_21.xsl"?>
and you can then view the JTL in a browser
-->

<xsl:output method="html" indent="yes" encoding="UTF-8" doctype-public="-//W3C//DTD HTML 4.01 Transitional//EN" />

<!-- Defined parameters (overrideable) -->
<xsl:param name="showData" select="‘n‘"/>
<xsl:param name="titleReport" select="‘Load Test Results‘"/>
<xsl:param name="dateReport" select="‘date not defined‘"/>

<xsl:template match="testResults">
<html>
<head>
<title><xsl:value-of select="$titleReport" /></title>
<style type="text/css">
body {
font:normal 68% verdana,arial,helvetica;
color:#000000;
}
table tr td, table tr th {
font-size: 68%;
}
table.details tr th{
color: #ffffff;
font-weight: bold;
text-align:center;
background:#2674a6;
white-space: nowrap;
}
table.details tr td{
background:#eeeee0;
white-space: nowrap;
}
h1 {
margin: 0px 0px 5px; font: 165% verdana,arial,helvetica
}
h2 {
margin-top: 1em; margin-bottom: 0.5em; font: bold 125% verdana,arial,helvetica
}
h3 {
margin-bottom: 0.5em; font: bold 115% verdana,arial,helvetica
}
.Failure {
font-weight:bold; color:red;
}


img
{
border-width: 0px;
}

.expand_link
{
position=absolute;
right: 0px;
width: 27px;
top: 1px;
height: 27px;
}

.page_details
{
display: none;
}

.page_details_expanded
{
display: block;
display/* hide this definition from IE5/6 */: table-row;
}


</style>
<script language="JavaScript"><![CDATA[
function expand(details_id)
{

document.getElementById(details_id).className = "page_details_expanded";
}

function collapse(details_id)
{

document.getElementById(details_id).className = "page_details";
}

function change(details_id)
{
if(document.getElementById(details_id+"_image").src.match("expand"))
{
document.getElementById(details_id+"_image").src = "collapse.png";
expand(details_id);
}
else
{
document.getElementById(details_id+"_image").src = "expand.png";
collapse(details_id);
} 
}
]]></script>
</head>
<body>

<xsl:call-template name="pageHeader" />

<xsl:call-template name="summary" />
<hr size="1" width="95%" align="center" />

<xsl:call-template name="pagelist" />
<hr size="1" width="95%" align="center" />

<xsl:call-template name="detail" />

</body>
</html>
</xsl:template>

<xsl:template name="pageHeader">
<h1><xsl:value-of select="$titleReport" /></h1>
<table width="100%">
<tr>
<td align="left">Date report: <xsl:value-of select="$dateReport" /></td>
<td align="right">Designed for use with <a >JMeter</a> and <a >Ant</a>.</td>
</tr>
</table>
<hr size="1" />
</xsl:template>

<xsl:template name="summary">
<h2>Summary</h2>
<table align="center" class="details" border="0" cellpadding="5" cellspacing="2" width="95%">
<tr valign="top">
<th># Samples</th>
<th>Failures</th>
<th>Success Rate</th>
<th>Average Time</th>
<th>Min Time</th>
<th>Max Time</th>
</tr>
<tr valign="top">
<xsl:variable name="allCount" select="count(/testResults/*)" />
<xsl:variable name="allFailureCount" select="count(/testResults/*[attribute::s=‘false‘])" />
<xsl:variable name="allSuccessCount" select="count(/testResults/*[attribute::s=‘true‘])" />
<xsl:variable name="allSuccessPercent" select="$allSuccessCount div $allCount" />
<xsl:variable name="allTotalTime" select="sum(/testResults/*/@t)" />
<xsl:variable name="allAverageTime" select="$allTotalTime div $allCount" />
<xsl:variable name="allMinTime">
<xsl:call-template name="min">
<xsl:with-param name="nodes" select="/testResults/*/@t" />
</xsl:call-template>
</xsl:variable>
<xsl:variable name="allMaxTime">
<xsl:call-template name="max">
<xsl:with-param name="nodes" select="/testResults/*/@t" />
</xsl:call-template>
</xsl:variable>
<xsl:attribute name="class">
<xsl:choose>
<xsl:when test="$allFailureCount > 0">Failure</xsl:when>
</xsl:choose>
</xsl:attribute>
<td align="center">
<xsl:value-of select="$allCount" />
</td>
<td align="center">
<xsl:value-of select="$allFailureCount" />
</td>
<td align="center">
<xsl:call-template name="display-percent">
<xsl:with-param name="value" select="$allSuccessPercent" />
</xsl:call-template>
</td>
<td align="center">
<xsl:call-template name="display-time">
<xsl:with-param name="value" select="$allAverageTime" />
</xsl:call-template>
</td>
<td align="center">
<xsl:call-template name="display-time">
<xsl:with-param name="value" select="$allMinTime" />
</xsl:call-template>
</td>
<td align="center">
<xsl:call-template name="display-time">
<xsl:with-param name="value" select="$allMaxTime" />
</xsl:call-template>
</td>
</tr>
</table>
</xsl:template>

<xsl:template name="pagelist">
<h2>Pages</h2>
<table align="center" class="details" border="0" cellpadding="5" cellspacing="2" width="95%">
<tr valign="top">
<th>URL</th>
<th># Samples</th>
<th>Failures</th>
<th>Success Rate</th>
<th>Average Time</th>
<th>Min Time</th>
<th>Max Time</th>
<th></th>
</tr>
<xsl:for-each select="/testResults/*[not(@lb = preceding::*/@lb)]">
<xsl:variable name="label" select="@lb" />
<xsl:variable name="count" select="count(../*[@lb = current()/@lb])" />
<xsl:variable name="failureCount" select="count(../*[@lb = current()/@lb][attribute::s=‘false‘])" />
<xsl:variable name="successCount" select="count(../*[@lb = current()/@lb][attribute::s=‘true‘])" />
<xsl:variable name="successPercent" select="$successCount div $count" />
<xsl:variable name="totalTime" select="sum(../*[@lb = current()/@lb]/@t)" />
<xsl:variable name="averageTime" select="$totalTime div $count" />
<xsl:variable name="minTime">
<xsl:call-template name="min">
<xsl:with-param name="nodes" select="../*[@lb = current()/@lb]/@t" />
</xsl:call-template>
</xsl:variable>
<xsl:variable name="maxTime">
<xsl:call-template name="max">
<xsl:with-param name="nodes" select="../*[@lb = current()/@lb]/@t" />
</xsl:call-template>
</xsl:variable>
<tr valign="top">
<xsl:attribute name="class">
<xsl:choose>
<xsl:when test="$failureCount > 0">Failure</xsl:when>
</xsl:choose>
</xsl:attribute>
<td>
<xsl:if test="$failureCount > 0">
<a><xsl:attribute name="href">#<xsl:value-of select="$label" /></xsl:attribute>
<xsl:value-of select="$label" />
</a>
</xsl:if>
<xsl:if test="0 >= $failureCount">
<xsl:value-of select="$label" />
</xsl:if>
</td>
<td align="center">
<xsl:value-of select="$count" />
</td>
<td align="center">
<xsl:value-of select="$failureCount" />
</td>
<td align="right">
<xsl:call-template name="display-percent">
<xsl:with-param name="value" select="$successPercent" />
</xsl:call-template>
</td>
<td align="right">
<xsl:call-template name="display-time">
<xsl:with-param name="value" select="$averageTime" />
</xsl:call-template>
</td>
<td align="right">
<xsl:call-template name="display-time">
<xsl:with-param name="value" select="$minTime" />
</xsl:call-template>
</td>
<td align="right">
<xsl:call-template name="display-time">
<xsl:with-param name="value" select="$maxTime" />
</xsl:call-template>
</td>
<td align="center">
<a href="">
<xsl:attribute name="href"><xsl:text/>javascript:change(‘page_details_<xsl:value-of select="position()" />‘)</xsl:attribute>
<img src="expand.png" alt="expand/collapse"><xsl:attribute name="id"><xsl:text/>page_details_<xsl:value-of select="position()" />_image</xsl:attribute></img> 
</a>
</td>
</tr>

<tr class="page_details">
<xsl:attribute name="id"><xsl:text/>page_details_<xsl:value-of select="position()" /></xsl:attribute>
<td colspan="8" bgcolor="#FF0000">
<div align="center">
<b>Details for Page "<xsl:value-of select="$label" />"</b>
<table bordercolor="#000000" bgcolor="#2674A6" border="0" cellpadding="1" cellspacing="1" width="95%">
<tr>
<th>Thread</th>
<th>Iteration</th>
<th>Time (milliseconds)</th>
<th>Bytes</th>
<th>Success</th>
</tr>

<xsl:for-each select="../*[@lb = $label and @tn != $label]"> 
<tr>
<td><xsl:value-of select="@tn" /></td>
<td align="center"><xsl:value-of select="position()" /></td>
<td align="right"><xsl:value-of select="@t" /></td>
<!-- TODO allow for missing bytes field -->
<td align="right"><xsl:value-of select="@by" /></td>
<td align="center"><xsl:value-of select="@s" /></td>
</tr>
</xsl:for-each>

</table>
</div>
</td>
</tr>

</xsl:for-each>
</table>
</xsl:template>

<xsl:template name="detail">
<xsl:variable name="allFailureCount" select="count(/testResults/*[attribute::s=‘false‘])" />

<xsl:if test="$allFailureCount > 0">
<h2>Failure Detail</h2>

<xsl:for-each select="/testResults/*[not(@lb = preceding::*/@lb)]">

<xsl:variable name="failureCount" select="count(../*[@lb = current()/@lb][attribute::s=‘false‘])" />

<xsl:if test="$failureCount > 0">
<h3><xsl:value-of select="@lb" /><a><xsl:attribute name="name"><xsl:value-of select="@lb" /></xsl:attribute></a></h3>

<table align="center" class="details" border="0" cellpadding="5" cellspacing="2" width="95%">
<tr valign="top">
<th>Response</th>
<th>Failure Message</th>
<xsl:if test="$showData = ‘y‘">
<th>Response Data</th>
</xsl:if>
</tr>

<xsl:for-each select="/testResults/*[@lb = current()/@lb][attribute::s=‘false‘]">
<tr>
<td><xsl:value-of select="@rc | @rs" /> - <xsl:value-of select="@rm" /></td>
<td><xsl:value-of select="assertionResult/failureMessage" /></td>
<xsl:if test="$showData = ‘y‘">
<td><xsl:value-of select="./binary" /></td>
</xsl:if>
</tr>
</xsl:for-each>

</table>
</xsl:if>

</xsl:for-each>
</xsl:if>
</xsl:template>

<xsl:template name="min">
<xsl:param name="nodes" select="/.." />
<xsl:choose>
<xsl:when test="not($nodes)">NaN</xsl:when>
<xsl:otherwise>
<xsl:for-each select="$nodes">
<xsl:sort data-type="number" />
<xsl:if test="position() = 1">
<xsl:value-of select="number(.)" />
</xsl:if>
</xsl:for-each>
</xsl:otherwise>
</xsl:choose>
</xsl:template>

<xsl:template name="max">
<xsl:param name="nodes" select="/.." />
<xsl:choose>
<xsl:when test="not($nodes)">NaN</xsl:when>
<xsl:otherwise>
<xsl:for-each select="$nodes">
<xsl:sort data-type="number" order="descending" />
<xsl:if test="position() = 1">
<xsl:value-of select="number(.)" />
</xsl:if>
</xsl:for-each>
</xsl:otherwise>
</xsl:choose>
</xsl:template>

<xsl:template name="display-percent">
<xsl:param name="value" />
<xsl:value-of select="format-number($value,‘0.00%‘)" />
</xsl:template>

<xsl:template name="display-time">
<xsl:param name="value" />
<xsl:value-of select="format-number($value,‘0 ms‘)" />
</xsl:template>

</xsl:stylesheet>

 

 

4、jenkins安装

1)之前本地已经安装过jenkins了,这里就不在讲如何安装jenkins。

2)jenkins构建项目

a、输入任务名称,点击构建一个自由风格的软件项目,点击确定

 

b、在构建中添加Invoke Ant

 

 

 

c、在点击高级

 

配置你在build.xml文件中配置的build.xml的路径,点击保存

d、点击立即构建,出现蓝色说明执行成功了,如图:

 

备注:到你在build.xml中配置的报告路径去找执行后的报告就可以了。————————————————版权声明:本文为CSDN博主「qq_30684681」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。原文链接:https://blog.csdn.net/qq_30684681/article/details/79577372

相关文章
相关标签/搜索
每日一句
    每一个你不满意的现在,都有一个你没有努力的曾经。
公众号推荐
   一个历史类的公众号,欢迎关注
一两拨千金
三期内必开一期 余干县| 佛学| 通辽市| 巍山| 皋兰县| 来宾市| 北辰区| 永嘉县| 武平县| 香港| 菏泽市| 五大连池市| 江川县| 焦作市| 玛曲县| 常德市| 忻州市| 华安县| 六安市| 潜山县| 繁峙县| 怀来县| 达日县| 庄浪县| 莱西市| 合水县| 汝州市| 镇远县| 廊坊市| 宁远县| 华池县| 罗源县| 萍乡市| 镇远县| 白朗县| 陈巴尔虎旗| 全椒县| 集安市| 个旧市| 阜阳市| 德令哈市| 财经| 阳春市| 新源县| 临安市| 蓬安县| 通江县| 汽车| 平山县| 丹东市| 弥勒县| 八宿县| 若尔盖县| 晋州市| 永寿县| 桃江县| 湘西| 荆州市| 卓尼县| 房产| 山东| 蓝山县| 利津县| 新昌县| 景泰县| 南宫市| 张家界市| 色达县| 邓州市| 西青区| 江津市| 临海市| 广水市| 马公市| 萝北县| 德清县| 云和县| 宁晋县| 寻甸| 中卫市| 江川县| 湘阴县| 关岭| 卢龙县| 咸丰县| 易门县| 大埔区| 大丰市| 柳州市| 浦北县| 内乡县| 淮南市| 望都县| 炉霍县| 绩溪县| 安康市| 吴桥县| 临颍县| 石景山区| 黄骅市| 郴州市| 资阳市| 互助| 资阳市| 林西县| 收藏| 龙游县| 松原市| 陵川县| 花莲市| 民乐县| 华容县| 两当县| 乡宁县| 田阳县| 寻甸| 临桂县| 花莲县| 宁海县| 交城县| 长武县| 云南省| 洪雅县| 榆树市| 新源县| 莒南县| 长海县| 广安市| 漾濞| 贵定县| 临夏县| 克东县| 凌海市| 镶黄旗| 响水县| 静海县| 西宁市| 沾益县| 景德镇市| 澄迈县| 长海县| 察雅县| 唐河县| 雷波县| 咸阳市| 彭阳县| 疏勒县| 达孜县| 华坪县| 巴南区| 江陵县| 丰城市| 望都县| 平谷区| 潮安县| 永靖县| 谷城县| 贡山| 宣武区| 镇江市| 桓台县| 阳东县| 双柏县| 彰化市| 扬州市| 金山区| 延边| 隆化县| 额敏县| 龙口市| 旬邑县| 舟山市| 武穴市| 富源县| 琼结县| 凤翔县| 来宾市| 汶上县| 永康市| 定兴县| 阿勒泰市| 兴和县| 合川市| 锡林郭勒盟| 长治市| 湄潭县| 天台县| 贵阳市| 邢台市| 宝应县| 凤台县| 分宜县| 高唐县| 平原县| 荥阳市| 讷河市| 西贡区| 旬邑县| 邳州市| 宾阳县| 灯塔市| 黔西县| 农安县| 孝昌县| 渭南市| 星子县| 漳州市| 榆树市| 内丘县| 运城市| 且末县| 辰溪县| 塔河县| 三穗县| 乐清市| 浪卡子县| 乌什县| 丹东市| 丹寨县| 鸡泽县| 蚌埠市| 高邮市| 资兴市| 丹巴县| 柘城县| 杭锦后旗| 延长县| 宜州市| 镇赉县| 元朗区| 老河口市| 南涧| 沿河| 怀来县| 分宜县| 那坡县| 邢台县| 牙克石市| 甘谷县| 石楼县| 岫岩| 高安市| 诸城市| 庆元县| 大足县| 达孜县| 栾川县| 昌宁县| 武威市| 永清县| 清流县| 吴江市| 新密市| 祁东县| 宣威市| 仪陇县| 鲁山县| 灵寿县| 澄江县| 新建县| 麦盖提县| 交口县| 大冶市| 哈巴河县| 大石桥市| 庆元县| 兴文县| 乌什县| 峨边| 高安市| 内黄县| 靖宇县| 安图县| 永登县| 伊通| 东乡县| 柳林县| 秭归县| 呼和浩特市| 旬阳县| 凤城市| 朔州市| 米林县| 罗山县| 福建省| 哈尔滨市| 苗栗市| 定结县| 长泰县| 大埔区| 枣阳市| 尉犁县| 信阳市| 龙游县| 连平县| 临潭县| 本溪市| 泗阳县| 神池县| 翼城县| 榆树市| 凉城县| 青海省| 乐东| 桐梓县| 义马市| 明星| 顺平县| 娄底市| 贞丰县| 迁安市| 临朐县| 申扎县| 商南县| 宾川县| 扶绥县| 山西省| 特克斯县| 天峨县| 古丈县| 佛山市| 客服| 阿巴嘎旗| 竹溪县| 墨江| 香港| 通海县| 西畴县| 湘西| 项城市| 泌阳县| 阳新县| 宜都市| 肇源县| 石屏县| 沅陵县| 佛教| 嘉兴市| 蒙城县| 麻江县| 肥乡县| 东山县| 东平县| 云龙县| 会泽县| 惠州市| 湘乡市| 通化县| 松潘县| 剑阁县| 北安市| 青神县| 清丰县| 甘肃省| 射洪县| 阜城县| 平泉县| 调兵山市| 青海省| 大兴区| 沙田区| 广河县| 怀化市| 东乌珠穆沁旗| 岳普湖县| 金门县| 广汉市| 塔城市| 新干县| 赣州市| 陆丰市| 天水市| 东乌珠穆沁旗| 霍林郭勒市| 丰台区| 吴旗县| 上蔡县| 报价| 东宁县| 郴州市| 仪征市| 静宁县| 锡林郭勒盟| 平凉市| 天镇县| 通榆县| 察隅县| 神池县| 永和县| 阿拉善左旗| 金华市| 桐庐县| 阿合奇县| 栖霞市| 博客| 锡林浩特市| 扶余县| 周至县| 永济市| 淮阳县| 临高县| 靖宇县| 大安市| 苍山县| 鲁山县| 漳平市| 昔阳县| 贵德县| 正安县| 涡阳县| 故城县| 临武县| 博客| 甘洛县| 玉田县| 城口县| 普洱| 佛学| 宜兰县| 北宁市| 安吉县| 海盐县| 康保县| 玛沁县| 冷水江市| 新建县| 石景山区| 昂仁县| 浦城县| 阜平县| 博爱县| 大化| 呼伦贝尔市| 遂溪县| 龙胜| 平南县| 佛冈县| 象州县| 西青区| 松江区| 准格尔旗| 大名县| 阿鲁科尔沁旗| 榕江县| 庐江县| 两当县| 浠水县| 清河县| 安福县| 上饶县| 盐亭县| 千阳县| 基隆市| 闻喜县| 灵寿县| 轮台县| 临桂县| 梅河口市| 榆树市| 江达县| 庆安县| 田东县| 休宁县| 岳普湖县| 六安市| 义马市| 东莞市| 光山县| 许昌市| 确山县| 蓬莱市| 体育| 扶沟县| 东乌珠穆沁旗| 柳林县| 京山县| 应用必备| 南江县| 应用必备| 龙江县| 博爱县| 大冶市| 清远市| 平江县| 邵阳市| 孟州市| 博罗县| 田阳县| 泸溪县| 天台县| 曲水县| 五大连池市| 荃湾区| 永春县| 马公市| 鞍山市| 东兴市| 太保市| 宜兴市| 汶上县| 大余县| 奉贤区| 石台县| 兴国县| 民县| 霸州市| 贵州省| 三门县| 都安| 当涂县| http://wap.bo2020levels.fun http://wap.gz1980prograzzec.fun http://wap.yqo9j3rl7v.fun http://wap.gz1980draftc.fun http://m.bo2020stands.fun http://m.yqo0j0rl5v.fun http://m.gz1980expressc.fun http://www.bo2020outs.fun http://wap.bo2020searchs.fun http://wap.yqo1j8rl9v.fun http://www.gz1980studyc.fun http://www.bo2020believes.fun http://wap.bo2020pearls.fun http://wap.yqo0j8rl0v.fun http://www.gz1980channelc.fun