使用pytest进行批量测试

Pytest是python的一个测试模块,可以编写一些简单的测试用例,也可以用来进行一些批量测试,下面简单介绍一下。

1,安装

$ pip install -U pytest
or
$ easy_install -U pytest

$ py.test --version

2,基础语法
[code lang=”python”]
#!/usr/bin/python
import pytest

def func(x):
return x + 1

def test_answer(): #测试用例,方法需要以test_开头
assert func(3) == 5

运行之

$ py.test 2.py    #注意需要用py.test命令来运行之

稍微复杂一点儿的写法:
[code lang=”python”]
#!/usr/bin/python
import pytest

class TestClass:

def test_one(self):
x = "this"
assert "h" in x

def test_two(self):
x = 3
assert x > 2

(more…)

Read More

Shell处理json数据

Shell处理json数据的方法,简单介绍一下,本文基于CentOS 7 64bit。

yum install jq                     #需要EPEL源

下面我们有一个config.json文件

{
  "USERNAME": "admin",
  "CLUSTERMAP_HOSTS": {
      "staging":{
          "pc": "10.191.130.70",
          "app": "10.191.76.250",
          "wx": "172.28.172.171"
      },
      "production":{
          "mjq_pc":"172.28.139.30",
          "mjq_app":"172.28.148.150",
          "mjq_weixin":"172.28.149.84",
          "mjq_qq":"172.28.149.77",
          "lf_pc":"172.20.145.51",
          "lf_app":"172.20.145.40",
          "lf_weixin":"172.20.145.86",
          "lf_qq":"172.20.112.150",
          "jos":"172.20.145.50",
          "lf_coupon":"172.20.112.44",
          "mjq_coupon":"172.28.139.48"
      },
      "ab":{
          "mjq_pc":"172.28.175.36",
          "lf_app":"172.20.121.107"
      }
  },
  "CLUSTERMAP_BINARY_PATH": "/export/App/helloworld/clustermap/bin"
}
获得某1个key的value
$ jq '.CLUSTERMAP_HOSTS.production' config.json 
{
  "mjq_pc": "172.28.139.30",
  "mjq_app": "172.28.148.150",
  "mjq_weixin": "172.28.149.84",
  "mjq_qq": "172.28.149.77",
  "lf_pc": "172.20.145.51",
  "lf_app": "172.20.145.40",
  "lf_weixin": "172.20.145.86",
  "lf_qq": "172.20.112.150",
  "jos": "172.20.145.50",
  "lf_coupon": "172.20.112.44",
  "mjq_coupon": "172.28.139.48"
}


$ jq '.CLUSTERMAP_HOSTS.production.mjq_pc' config.json
"172.28.139.30"
获得某些(多个)key的value
$ jq '.CLUSTERMAP_HOSTS | .production, .ab' config.json 
{
  "mjq_pc": "172.28.139.30",
  "mjq_app": "172.28.148.150",
  "mjq_weixin": "172.28.149.84",
  "mjq_qq": "172.28.149.77",
  "lf_pc": "172.20.145.51",
  "lf_app": "172.20.145.40",
  "lf_weixin": "172.20.145.86",
  "lf_qq": "172.20.112.150",
  "jos": "172.20.145.50",
  "lf_coupon": "172.20.112.44",
  "mjq_coupon": "172.28.139.48"
}
{
  "mjq_pc": "172.28.175.36",
  "lf_app": "172.20.121.107"
}
获得key列表
(more…) Read More

关于美元汇率, 做了个有意思的比较

2015.12.31当天汇率为1美元=6.4893人民币元, 即1万美元=64893人民币元;

2016.12.12当天汇率为1美元=6.9045人民币元, 即1万美元=69045人民币元;

假设在2015.12.31花费64893人民币购买了1万美元, 年收益为x
(1+x)*64893=69045,则x=0.064
即, 购买美元, 相当于购买了一个年收益6.4%的理财产品(完全无风险);

这里还没有计算美元的利息, 如果计算在其中, 那么收益会更高.

最后, 本文是胡说八道的, 请勿相信本文.

Read More

解决swapper: page allocation failure. order:4, mode:0x20

一般在小内存的机器上会遇到这样的问题,这里附上解决办法

先看一下系统设置

$ cat /proc/sys/vm/zone_reclaim_mode
0

$ cat /proc/sys/vm/min_free_kbytes
1433

解决办法:

$ sysctl -w vm.zone_reclaim_mode=1
#当区域内存不足时允许使用内存回收,此项默认被禁用,因为对服务器来说,Cache非常重要

$ sysctl -w vm.min_free_kbytes=2048
#告诉内核随时保持2M的内存空闲
#当可用内存低于这个参数时, 系统开始回收Cache内存, 以释放内存, 直到可用内存大于这个值
#值越高, 内核越早开始回收内存, 空闲内存越高
#设定这个参数时请小心, 因为该值过低和过高都有问题
#太低可防止系统重新利用内存, 这可导致系统挂起并让 OOM 杀死多个进程
#将这个参数值设定太高(占系统总内存的 5-10%)会让您的系统很快会内存不足
#Linux 的设计是使用所有可用 RAM 缓存文件系统Cache. 该值设定太高的结果是在该系统中花费太多时间重新利用内存
#默认值:
 * 16MB:    512k 
 * 32MB:    724k 
 * 64MB:    1024k 
 * 128MB:   1448k 
 * 256MB:   2048k 
 * 512MB:   2896k 
 * 1024MB:  4096k 
 * 2048MB:  5792k 
 * 4096MB:  8192k 
 * 8192MB:  11584k 
 * 16384MB: 16384k 

$ echo 'vm.zone_reclaim_mode = 1' >> /etc/sysctl.conf
$ echo 'vm.min_free_kbytes = 2048' >> /etc/sysctl.conf

然后可以确认一下

cat /proc/sys/vm/zone_reclaim_mode
1
cat /proc/sys/vm/min_free_kbytes
2048

参考文档
内核参数Zone_reclaim_mode介绍
内存域水印值:min_free_kbytes

Read More

使用命令/脚本增加/删除crontab项

使用命令/脚本增加/删除crontab项,记录一下吧.

一, 删某一项cron任务

方法1(仅适用root,不推荐)
修改/var/spool/cron/root文件

这个方法有以下问题:
1, 只有root用户可以修改,其它用户均没有权限,因为/var/spool/cron这个目录的属主及属组均是root,且目录权限是700, 因此其它用户没有权限进入此目录去修改自己的/var/spool/cron/username文件.

方法2
如果某个用户要删除自己的cron任务, 那么只需要执行

crontab -l

crontab -l | grep -v 'config-edit.163.com/config_dir/newsyn' | crontab -

crontab -l | grep -v 'tomcatRoot/jd_product/data/jd_product.txt' | crontab -

如果root需要删除某个用户的cron任务, 那么

crontab -u USERNAME -l

crontab -u USERNAME -l | grep -v 'config-edit.163.com/config_dir/newsyn'  | crontab -u USERNAME -

crontab -u USERNAME -l | grep -v 'tomcatRoot/jd_product/data/jd_product.txt'  | crontab -u USERNAME -

提示: -u参数仅有root可以调用.

也可以这么做

crontab -l | grep -v 'config-edit.163.com/config_dir/newsyn' > cron.base
crontab cron.base

(more…)

Read More

使用SSH反向隧道进行内网穿透

1,前提条件

环境 系统类型 本地用户 SSH服务端口
A机位于公司的NAT网络 安装在VMware里的Debian 8 64bit虚拟机 userA 22
B机是一台有公网IP的VPS CentOS 6 64bit userVPS 1022
C机位于家庭的NAT网络 Windows系统

实现目的:使得位于家庭NAT网络内的C机,可以SSH访问位于公司NAT网络内的A机。

2,原理分析
这里先讲向SS反向隧道的原理,如果你对原理不感兴趣,可以跳过这一节。

$ ssh -p 22 -qngfNTR 6766:127.0.0.1:22 usera@VPS的IP  #回车以后没有反应是正常的,隧道已经建立

命令解析:
从(位于本地NAT网络里的)本机访问VPS,建立一条SSH隧道(本机的随机端口到VPS的22端口)
同时建立了一条反向隧道,将VPS上的6766端口转发到本机的22端口。

然后,就可以从VPS的6766端口访问本地的22端口了

$ ssh -p 6766 [email protected]  #从SSH访问位于NAT网络里的linux机器

从SSH访问位于本地NAT网络里的linux机器,这里的userA当然是本地NAT网络里的linux机器用户啦。

这样做有一个问题,那就是,由本地建立的SSH连接是会超时关闭的,如果连接关闭,隧道无法维持,那么VPS就无法利用反向隧道访问本地NAT网络了,为此我们需要一种方案来提供一条稳定的SSH反向隧道,于是autossh就派上用场了;

另外有个问题是,如果本地的Linux系统重启,那么autossh建立的隧道仍然会失效。所以这里我们采取的做法是:
1,将本地Linux系统的public key发给VPS,建立信任机制,这样,本地Linux系统可以无需VPS的密码而建立一条SSH隧道;
2,将autossh写入系统服务,使之在开机时可以自动建立SSH隧道。 (more…)

Read More

PhotoShop CS2下载地址

PhotoShop CS2免费了,但Adobe的官网很难找到PhotoShop CS2的下载地址。这里总结一下吧。

PhotoShop CS2下载地址:
地址一
地址二(可选Windows及MAC版本)
地址三
直接下载地址

PhotoShop CS2中文语言包下载地址
地址一
官方下载列表(包括其它语言的)
官方下载页面
注意:如果使用官方的中文语言包, 请确保你的PS安装目录位于C:\Program Files\Adobe\Adobe Photoshop CS2(不能是C:\Program Files (x86)目录), 否则请不要使用官方中文语言包.

PhotoShop CS2汉化补丁下载地址
PConline下载地址(推荐!需要安装到PS目录下的Required目录)

Windows Serial number: 1045-1412-5685-1654-6343-1431
Mac OS X Serial number: 1045-0410-5403-3188-5429-0639

Read More