- 关于公司环境是代理上网的情况下,如何进行脚本自动化测试内网系统以及发外网邮件
pac
proxy.pac内容
function FindProxyForURL(url, host) {
// our local URLs from the domains below example.com don't need a proxy:
if (shExpMatch(host, "想要测试的内网地址"))
{
return "DIRECT";
}
// URLs within this network are accessed through
// port 8080 on fastproxy.example.com:
if (isInNet(host, "www.baidu.com", "255.255.248.0"))
{
return "PROXY 代理IP:8080";
}
// All other requests go through port 8080 of proxy.example.com.
// should that fail to respond, go directly to the WWW:
return "PROXY 代理IP:8080; DIRECT";
记住修改IE设置后,重启IE才生效
发邮件类的函数加入如下代码
socks.setdefaultproxy(socks.HTTP, "IP", 8080)
socket.socket = socks.socksocket
socks.wrapmodule(smtplib)
smtp_server = smtplib.SMTP()
smtp_server.connect('smtp.exmail.qq.com')
smtp_server.set_debuglevel(1)
关闭代理的情况下,可以测试内网系统,也可以发外网邮件
- 关于ddt使用的实践
test_data1 = [{"username": "wukong", "pwd": "wukong"},
{"username": "wuneng", "pwd": "woneng"},
{"username": "wujing", "pwd": "wujing"},
]
@ddt.ddt
class TestQddt(unittest.TestCase):
@ddt.data(*test_data1)
#@ddt.data('1111','2222')
#@ddt.unpack
def test_search2(self,data):
driver.find_element(*self.locator_txt).send_keys(data)
if __name__ == '__main__':
#通过这个方式,可以执行成功#unittest.main()
#通过这个方式,可以执行成功
#suite = unittest.TestLoader().loadTestsFromTestCase(TestFormelQddt)
#unittest.TextTestRunner(verbosity=2).run(suite)
#按照一定格式获取当前时间
now = time.strftime("%Y%m%d_%H%M%S")
#将当前时间加入到报告文件名称中
filename = now+'result.html'
#定义测试报告存放路径
#定义测试报告
report= REPORT_PATH+'\\'+filename
#report = REPORT_PATH + '\\report.html'
with open(report, 'wb') as f:
runner = HTMLTestRunner(f, verbosity=2, title='测试报告', description='采用自动化测试框架编写测试用例')
suite = unittest.TestLoader().loadTestsFromTestCase(TestFormelQddt)
runner.run(suite)
#runner.run(TestFormelQddt('test_search2'))#通过这个方式,不能执行成功,报错:TestFormelQddt中没有test_search2
e = Email(title='测试结果',
message='今天的测试结果',
receiver='',
server='smtp.exmail.qq.com',
sender='',
password='',
path=report
)
e.send()
-------------------------------------------------------------------------------
以下代码也可运行成功
import unittest
from ddt import ddt, data, unpack
import csv
from pprint import pprint
def add(a, b):
print(a, b)
c = a + b
print(c)
return c
def addstr(a, b):
c = a + b
return c
@ddt
class Test(unittest.TestCase):
@data((1, 1, 2), (1, 2, 3))
@unpack
def test_addnum(self, a, b, expected_value):
self.assertEqual(add(a, b), expected_value)
if __name__ == "__main__":
suite = unittest.TestLoader().loadTestsFromTestCase(Test)
unittest.TextTestRunner(verbosity=2).run(suite)
- phantomjs
PhantomJS是一个可编程的无头浏览器.
无头浏览器:一个完整的浏览器内核,包括js解析引擎,渲染引擎,请求处理等,但是不包括显示和用户交互页面的浏览器。
from selenium import webdriver
from selenium.webdriver.common.proxy import Proxy
from selenium.webdriver.common.proxy import ProxyType
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
import random, string, os
proxy = Proxy(
{
'proxyType': ProxyType.MANUAL,
'httpProxy': IP:8080'
}
)
desired_capabilities = DesiredCapabilities.PHANTOMJS.copy()
proxy.add_to_capabilities(desired_capabilities)
driver = webdriver.PhantomJS(
executable_path="C:/Program Files/IBM/AppScan Standard/lib/phantomjs.exe",
desired_capabilities=desired_capabilities
)
driver.get('http://www.baidu.com/')
os.system("D:\\login2.exe")
driver.switch_to.default_content()
driver.switch_to.frame("leftFrame")
driver.find_element_by_xpath("//ul[@id='navigation']/li[3]/a/div/div[2]").click()
driver.close()
- 接口测试--基础概念解析
一个用户接口可以通过以下4种不同方式的请求,来做不同的事情:
- 获取用户信息
- 创建用户
- 修改用户
- 删除用户
你完全可以像“灯”的那个例子,用GET请求来传递不同的参数来实现,但是这样如果接口多了,就会很混乱,很难管理。
这时,我们需要一种规则:
- 当用“GET”方式时,只用来获取数据,成功了返回http状态码200
- 当用“POST”方式时,只用来创建数据,成功了返回http状态码201
- 当用“PUT”方式时,只用来修改数据,成功了返回http状态码203
- 当用“DELETE”方式时,只用来删除数据,成功了返回http状态码204
- 当请求发送失败,返回http状态码400
这样子的规则,我们称它为“RESTful”标准。
接口测试的步骤:
- 拿到接口的url地址
- 查看接口是用什么方式发送
- 添加请求头,请求体
- 发送查看返回结果,校验返回结果是否正确
这个是正常的一套流程,异常的情况,比如参数不传值呀,传的值不正确呀,明明要求用"GET"请求发送,偏要用"POST"请求发送呀等等。
postman下载
https://www.getpostman.com/apps