Python初学之流程控制小游戏

初学Python,小游戏分享,系统和人互动,猜系统未知答案,每猜一次,猜错给出提示,直到猜对。如下:

from random import randint

num=randint(2,10)

print ‘Who do you think i am ?’

bingo=False

while bingo==False:

answer=input()

if answer>num:

print “too large!”

if answer<num:

print “too small!”

if answer==num:

print ‘you are best!’

bingo=True

解释:首先,答案是一个random随机函数,在2到9的随机函数,如果没有使用while语句进行流程控制,那么上面的小游戏,不管对错,每次只能猜一次,所以引入while语句:
同if一样,while也是一种控制流语句,另外它也被称作循环语句。继续来看渣画质手绘流程图:

 

程序执行到while处,“当”条件为True时,就去执行while内部的代码,“当”条件为False时,就跳过。

语法为:

while 条件:
循环执行的语句
 

 

 

实现过程为:先定义bool变量bingo为False,那么当这个变量一直是Flase时,执行下面的循环语句,猜错了就不会输出bingo为True的结果。循环一直执行,我们可以一直回答,直到猜对了,输出bingo变量为True的值,才会导致while条件不再成立。游戏结束。

后来学到了,函数

我们希望有这样一个函数,它比较两个数的大小。

如果第一个数小了,就输出“too small”

如果第一个数大了,就输出“too big”

如果相等,就输出“bingo”

函数还有个返回值,当两数相等的时候返回True,不等就返回False

于是我们来定义这个函数:

def isEqual(num1, num2):

if num1<num2:

print ‘too small’

return False;

if num1>num2:

print ‘too big’

return False;

if num1==num2:

print ‘bingo’

return True

return是函数的结束语句,return后面的值被作为这个函数的返回值。函数中任何地方的return被执行到的时候,这个函数就会结束。

 

然后在我们的小游戏里使用这个函数:

from random import randint

num = randint(1, 100)

print ‘Guess what I think?’

bingo = False

while bingo == False:

answer = input()

bingo = isEqual(answer, num)

 

在isEqual函数内部,会输出answer和num的比较结果,如果相等的话,bingo会得到返回值True,否则bingo得到False,循环继续。

 

 

函数可以把某个功能的代码分离出来,在需要的时候重复使用,就像拼装积木一样,这会让程序结构更清晰。

 

 

 

 

testng简单介绍

1.打开Eclipse   Help ->Install New Software ,   然后Add   “http://beust.com/eclipse
1
2.TestNG最简单的测试

下面是TestNG的最简单的一个例子

package TankLearn2.Learn;

import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.testng.annotations.Test;

public class TestNGLearn1 {

@BeforeClass
public void beforeClass() {
System.out.println(“this is before class”);
}

@Test
public void TestNgLearn() {
System.out.println(“this is TestNG test case”);
}

@AfterClass
public void afterClass() {
System.out.println(“this is after class”);
}
}

3.testng如何执行

直接执行:右键要执行的方法,  点Run As ->TestNG Test

2

4.testng异常测试
测试中,有时候我们期望某些代码抛出异常。

TestNG通过@Test(expectedExceptions) 来判断期待的异常, 并且判断Error Message
package TankLearn2.Learn;

import org.testng.annotations.Test;

public class ExceptionTest {

@Test(expectedExceptions = IllegalArgumentException.class, expectedExceptionsMessageRegExp=”NullPoint”)
public void testException(){
throw new IllegalArgumentException(“NullPoint”);
}
}

5.testng组测试
testNG中可以把测试用例分组,这样可以按组来执行测试用例比如:
package TankLearn2.Learn;

import org.testng.annotations.Test;

public class GroupTest {

@Test(groups = {“systemtest”})
public void testLogin(){
System.out.println(“this is test login”);
}

@Test(groups = {“functiontest”})
public void testOpenPage(){
System.out.println(“this is test Open Page”);
}
}
然后在testng.xml中 按组执行测试用例










6.testng参数测试
通过DataProvider传递参数
package TankLearn2.Learn;

import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;

public class DataProviderLearn {

@DataProvider(name=”user”)
public Object[][] Users(){
return new Object[][]{
{“root”,”passowrd”},
{“cnblogs.com”, “tankxiao”},
{“tank”,”xiao”}
};
}

@Test(dataProvider=”user”)
public void verifyUser(String userName, String password){
System.out.println(“Username: “+ userName + ” Password: “+ password);
}
}

7.testng测试报告
测试报告是测试非常重要的部分.

TestNG默认情况下,会生产两种类型的测试报告HTML的和XML的。 测试报告位于 “test-output” 目录下.
2

也可以设置测试报告的内容级别.

verbose=”2″ 标识的就是记录的日志级别,共有0-10的级别,其中0表示无,10表示最详细








Monkey测试环境搭建

如果想要搭建好Monkey的测试环境,首先几个必要的步骤和环境不能少,分别是java相关环境、Android SDK环境,启动android虚拟机或连接真机与执行monkey测试。现在我分步总结如下:

一、JAVA环境的搭建
1、首先要安装java的JDK;
2、安装好JDK之后需要配置环境变量,
在“系统变量”中,设置3项属性,JAVA_HOME,PATH,CLASSPATH(大小写无所谓),若已存在则点击“编辑”,不存在则点击“新建”; 
JAVA_HOME指明JDK安装路径,就是刚才安装时所选择的路径,如:D:\java\jdk1.5.0_08,
此路径下包括lib,bin,jre等文件夹(此变量最好设置,因为以后运行tomcat,eclipse等都需要依*此变量);
 
  Path使得系统可以在任何路径下识别java命令,设为: 
 
  %JAVA_HOME%\bin;%JAVA_HOME%\jre\bin 
 
  CLASSPATH为java加载类(class or lib)路径,只有类在classpath中,java命令才能识别,设为: 
 
  .;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar (要加.表示当前路径) 
 
  %JAVA_HOME%就是引用前面指定的JAVA_HOME;
3、“开始”->;“运行”,键入“cmd”;输入命令“java -version”,“java”,“javac”几个命令,出现了JAVA的版本信息,说明环境变量设置成功.
上传1
二、Android SDK工具安装

1.下载基于windows 的 androidSDK

下安装的官网地址请参照:http://developer.android.com/intl/zh-cn/sdk/index.html#Other,截图如下:

Monkey测试教程-Monkey介绍及测试环境搭建1上传2

2. 设置sdk下面tools的环境变量

下载安装完成后,鼠标右击“计算机”-》属性-》高级系统设置-》环境变量-》先设置Android的环境变量,与JAVA一样,先新建ANDROID_HOME环境变量

上传3

 再在Path编辑加入%ANDROID_HOME%\tools;%ANDROID_HOME%\platform-tools;

上传4

3.安装完成之后,打开android SDK显示如下:

上传5
三、Android Monkey 测试准备[注意:保证手机内存充足,否则无法测试]

  上面的步骤如果都完成之后,如果想要启动Monkey测试环境,必须先启动android虚拟机或者连接上真机。这里以真机来说:

   [注意:保证手机内存充足,否则无法测试]

 1.  启动命令行,输入cmd,打开命令窗口;
 

 2. 进入路径为SDK的platform-tools的安装路径,如下:

F:\Program Files (x86)\Android\android-sdk\platform-tools】

上传6

输入adb空格shell:

上传7

出现error:device not found,说明安卓设备没有被找到,此时可以使用手机连接电脑,手机的USB模式必须打开,电脑上必须安装有手机的驱动,连上设备之后,我们在输入adb shell命令,如下:

上传8

上图就是能执行操作的命令,此时就可以执行Monkey Test命令了。

此时我们可以执行monkey命令:

Monkey –p com.qq –v 1000

此命令意思为执行1000次随机用户模拟操作,com.jianke.doctor为安装包的名字,例如Monkey –p com.jianke.doctor –v 100

上传9上传10

以上是我使用Monkey测试的基础环境搭建,欢迎大家一起学习。

 

python webdriver环境搭建

环境搭建
准备工具如下:
————————————————————-下载 python【python 开发环境】
http://python.org/getit/
下载 setuptools 【python 的基础包工具】
http://pypi.python.org/pypi/setuptools
下载 pip 【python 的安装包管理工具】
https://pypi.python.org/pypi/pip

setuptools 是 python 的基础包工具,可以帮助我们轻松的下载,构建,安装,升级,卸载 python
的软件包。
pip 是python软件包的安装和管理工具, 有了这个工具, 我们只需要一个命令就可以轻松的python 的任意类库。

windows 环境安装
第一步、安装 python 的开发环境包,选择需要安装路径进行安装,笔者下载的是目前最新的
python2.7.5版本,安装目录为:C:\Python27。
第二步、安装 setuptools 通过前面提供的 setuptools 的连接,拖动页面到底部找到,
setuptools-1.3.2.tar.gz 文件(版本随着时间版本会有更新) ,对文件进行解压,找到 ez_install.py
文件,进入 windows 命令提示(开始–运行–cmd 命令,回车)下执行 ez_install.py:
C:\setuptools-1.3>python ez_install.py
如果提示 python 不是内部或外部命令!别急,去添加一下 python 的环境变量吧!桌面“我的电脑”
右键菜单–>属性–>高级–>环境变量–>系统变量中的 Path 为:
变量名:PATH
变量值:;C:\Python27
第三步、安装 pip ,通过上面提供的链接下载 pip-1.4.1.tar.gz(版本随着时间版本会有更新) ,我
默认解压在了 C:\pip-1.4.1 目录下,打开命令提示符(开始–运行–cmd 命令,回车)进入 C:\pip-1.4.1
目录下输入:
C:\pip-1.4.1 > python setup.py install
再切换到 C:\Python27\Scripts 目录下输入:
C:\Python27\Scripts > easy_install pip
第四步、安装 selenium,如果是电脑处于联网状态的话,可以直接在 C:\Python27\Scripts 下输入
命令安装:
C:\Python27\Scripts > pip install -U selenium

如果没联网,可以通过下载安装:
selenium 下载地址: https://pypi.python.org/pypi/selenium
下载 selenium 2.33.0 (目前的最新版本) ,并解压把整个目录放到 C:\Python27\Lib\site-packages
目录下。

测试是否安装成功:

在开始菜单找到 python 目录,打开 IDLE(python GUI)程序,启动的是一个
交互模式。可以输入:from selenium import webdriver

上面的命令为导入 selenium 的相关包,如果回车后没有报错表示我们的 selenium 安装是成功的。

需要学习更多,可以找我一起学习哦

配置中心集成文档

在 manage-web 工程里,我们已经使用分布式配置进行管理,项目中的properties文件存储在分布式服务器,以下介绍集成的步骤。


step 1: 在spring配置文件中,新增并修改(scanPackage,property_list)以下配置:

<!-- 使用disconf必须添加以下配置 -->
    <bean id="disconfMgrBean" class="com.baidu.disconf.client.DisconfMgrBean"
          destroy-method="destroy">
        <!-- 一定注意修改这里扫描包的路径-->
        <property name="scanPackage" value="com.gaosi"/>
    </bean>

    <bean id="disconfMgrBean2" class="com.baidu.disconf.client.DisconfMgrBeanSecond"
          init-method="init" destroy-method="destroy">
    </bean>

    <!-- 使用托管方式的disconf配置(无代码侵入, 配置更改不会自动reload)-->
    <bean id="configproperties_no_reloadable_disconf"
          class="com.baidu.disconf.client.addons.properties.ReloadablePropertiesFactoryBean">
        <property name="locations">
            <list>
                <value>application-config.properties</value>
                <value>disconf.properties</value>
                <value>log4j.properties</value>
                <value>mail.properties</value>
                <value>messages_zh_CN.properties</value>
                <value>prop.properties</value>
                <value>redis.properties</value>
            </list>
        </property>
    </bean>

    <bean id="propertyConfigurerForManageWeb"
          class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="ignoreResourceNotFound" value="false"/>
        <property name="ignoreUnresolvablePlaceholders" value="true"/>
        <property name="propertiesArray">
            <list>
                <ref bean="configproperties_no_reloadable_disconf"/>
            </list>
        </property>
    </bean>

step 2 引入依赖:

com.baidu.disconf
disconf-client
2.6.36


step 2:备份(dev,test,pre,pro)各个环境的配置文件(很重要)


step 3:删除各个环境的resource里的所有properties文件


step 4:在各个环境新增配置文件 disconf.properties(参考manage-web项目),配置如下:

# 是否开启配置中心管理
disconf.enable.remote.conf=true

#配置中心服务器地址
disconf.conf_server_host=192.168.0.238:80

# 当前配置文件的版本号
disconf.version=1_0_0_0

# 定义此项目的app名字
disconf.app=aixuexi_manage_web

# 配置文件的环境
disconf.env=dev

# 忽略的文件列表
disconf.ignore=

# 重试次数
disconf.conf_server_url_retry_times=1
# 重试间隔时间
disconf.conf_server_url_retry_sleep_seconds=1

# 从配置中心download下来的配置文件存放地址
disconf.user_define_download_dir=./src/main/dev

step 5: 访问配置中心本地测试的地址,上传dev下所有的properties文件到dev的环境,需要对应disconf中的(disconf.app、disconf.env、disconf.version)

地址: http://192.168.0.238/
用户名: admin
密码: 123456

step 6: 在本地启动项目,选择dev环境,看运行是否正常。


step 7: 在gitignore中添加配置(避免properties文件被提交到仓库):

*.properties
*.lock
!disconf.properties

step 8: 将其他环境(onlinetest,pre,pro)的配置文件,并且附带(disconf.app、disconf.env、disconf.version)信息,邮件发送给OP,OP负责把配置文件上传到线上的配置中心。


step 9: 集成完毕!

新人培训的感想和建议

感想:业务性的整体培训以及整体技术架构的普及对于新员工来说是非常有必要的,不仅让我们对公司整体的发展方向有一个清晰的认识,也丰富了我们的技术和业务认知,对今后的工作也有了清晰的定位。

建议:1.随着业务体系的庞大,我觉得上线这个流程应该是对于项目团体来说的,项目组应该有自己的上线服务权限,也就是说运维和业务技术团队应该独立;2.日志体系,随着业务线的增长,日志将来会应用于许多场景,如统计分析,行为分析采集,以及系统性能诊断等方面;3.代码质量审查,降低代码的重构率,规范编码质量,是有必要的;4.新项目开发或是重构的流程规范。我能想到的暂时就这些,不知道对不对或是符不符合,请大家指出~

zabbix agent 安装脚本

#!/bin/bash

#define color variables
RED=’\E[1;31m’
GRN=’\E[1;32m’
YEL=’\E[1;33m’
MAG=’\E[1;35m’
RES=’\E[0m’
#define environment variables
ZB_NAME=”zabbix”
ZB_VERSION=”3.2.4″
ZB_SOFT=”${ZB_NAME}-${ZB_VERSION}.tar.gz”
ZB_SOURCE_DIR=”/data/usr/src”
ZB_INSTALL_DIR=”/data/usr/local”
ZB_SOFT_DIR=”/data/soft”
ZB_CONF_FILE=”${ZB_INSTALL_DIR}/${ZB_NAME}/etc/zabbix_agentd.conf”
ZB_SER_IP=’10.26.83.53′
ZB_PUBLIC_DIR=”/mnt/zabbix”
ZB_LOG_DIR=”${ZB_PUBLIC_DIR}/zabbix_agentd.log”
ZB_PID_DIR=”${ZB_PUBLIC_DIR}/zabbix_agentd.pid”
ZB_PORT=’10050′
ZB_HOSTNAME=`hostname`
ZB_USER=`cat /etc/passwd |grep zabbix| wc -l`

check_dependency () {

NUM=`lsof -i :${ZB_PORT} | grep “LISTEN” | grep -v grep | wc -l`
if [ ${NUM} -ne 0 ];then
echo -e “${GRN}zabbix agent is install,${RES}”
exit 1
fi

if [ ${ZB_USER} -eq 0 ];then
useradd -s /sbin/nologin zabbix
fi
[ ${UID} -ne 0 ] && echo -e “${RED}need to be root to that${RES}” && exit 1
[ ! -d ${ZB_SOFT_DIR} ] && echo -e “${RED}no ${ZB_SOFT_DIR},Create a directory…${RES}” && mkdir -pv ${ZB_SOFT_DIR}
[ ! -f ${ZB_SOFT_DIR}/${ZB_SOFT} ] && echo -e “${RED}not fount file ${ZB_SOFT}… , please check…${RES}” && exit 1
[ ! -d ${ZB_SOURCE_DIR} ] && echo -e “${RED}no ${ZB_SOURCE_DIR},Create a directory…${RES}” && mkdir -pv ${ZB_SOURCE_DIR}
[ ! -d ${ZB_INSTALL_DIR} ] && echo -e “${RED}no ${ZB_INSTALL_DIR},Create a directory…${RES}” && mkdir -pv ${ZB_INSTALL_DIR}
[ ! -d ${ZB_PUBLIC_DIR} ] && echo -e “${RED}no ${ZB_PUBLIC_DIR},Create a directory…${RES}” && mkdir -pv ${ZB_PUBLIC_DIR} && chown -R ${ZB_NAME}.${ZB_NAME} ${ZB_PUBLIC_DIR}
PUBLIC_DIR_OMNER=`stat -c %G ${ZB_PUBLIC_DIR}`
PUBLIC_DIR_GROUP=`stat -c %G ${ZB_PUBLIC_DIR}`
if [ “${PUBLIC_DIR_OMNER}” != “${ZB_NAME}” ] || [ “${PUBLIC_DIR_GROUP}” != “${ZB_NAME}” ];then
chown -R ${ZB_NAME}.${ZB_NAME} ${ZB_PUBLIC_DIR}
fi
}

start_install () {
[ -d ${ZB_SOURCE_DIR}/${ZB_NAME}-${ZB_VERSION} ] && rm -rf ${ZB_SOURCE_DIR}/${ZB_NAME}-${ZB_VERSION}
[ -d ${ZB_INSTALL_DIR}/${ZB_NAME} ] && rm -rf ${ZB_INSTALL_DIR}/${ZB_NAME}
tar xf ${ZB_SOFT_DIR}/${ZB_SOFT} -C ${ZB_SOURCE_DIR}
cd ${ZB_SOURCE_DIR}/${ZB_NAME}-${ZB_VERSION}
if [ $? -eq 0 ];then
yum -y install gcc curl lsof
if [ $? -eq 0 ];then
./configure –prefix=${ZB_INSTALL_DIR}/${ZB_NAME} –enable-agent
if [ $? -eq 0 ];then
make
if [ $? -eq 0 ];then
make install
if [ $? -eq 0 ];then
echo -e “${GRN}zabbix agent install success${RES}”
else
echo -e “${RED}zabbix agent install faild,MAKE INSTALL faild,please check…${RES}”
exit 1
fi
else
echo -e “${RED}zabbix agent install faild,MAKE faild,please check…${RES}”
exit 1
fi
else
echo -e “${RED}zabbix agent install faild,CONFIGURE faild,please check…${RES}”
exit 1
fi
else
echo -e “${RED}yum set faild…,please check yum…${RES}”
exit 1
fi
else
echo -e “${RED}directory change faild or zabbix source directory not fount,please check…${RES}”
exit 1
fi
}

start_configure () {
# backup zabbix agent configure file
cp ${ZB_CONF_FILE} ${ZB_CONF_FILE}\-bak
sed -i “s#\# PidFile=/tmp/zabbix_agentd.pid#PidFile=${ZB_PID_DIR}#g” ${ZB_CONF_FILE}
sed -i “s#LogFile=/tmp/zabbix_agentd.log#LogFile=${ZB_LOG_DIR}#g” ${ZB_CONF_FILE}
sed -i “s#Server=127.0.0.1#Server=${ZB_SER_IP}#g” ${ZB_CONF_FILE}
sed -i “s#ServerActive=127.0.0.1#ServerActive=${ZB_SER_IP}#g” ${ZB_CONF_FILE}
sed -i “s#Hostname=Zabbix server#Hostname=${ZB_HOSTNAME}#g” ${ZB_CONF_FILE}
}

start_zabbix_agent () {
${ZB_INSTALL_DIR}/${ZB_NAME}/sbin/zabbix_agentd
NUM=`lsof -i :${ZB_PORT} | grep “LISTEN” | grep -v grep | wc -l`
if [ ${NUM} -ne 0 ];then
echo -e “${GRN}zabbix agent start success${RES}”
else
echo -e “${RED}zabbix agent start faild${RES}”
fi
}

check_dependency
start_install
start_configure
start_zabbix_agent

重启service脚本

PID=`ps aux | grep $1 | grep -v grep | grep -v $0 | awk ‘{print $2}’`
export JAVA_HOME=/usr/lib/jvm/jdk7
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
if [ -z $PID ];then
sh $1/student-service/bin/start.sh
if [ $? -eq 0 ];then
echo “service start success”
else

echo “service start failed”
fi
else
kill -9 $PID
sh $1/student-service/bin/start.sh
if [ $? -eq 0 ];then
echo “service start success”
else

echo “service start failed”
fi
fi