1,定时任务
2,Bug管理
3,测试报告
4,生成管理
1、测试的分类
1.1 按照项目的流程阶段来分
单元测试:也叫做模块测试
集成测试:检查各个模块的接口是否正确
系统测试:争对整个产品系统
验收测试:
1.2 根据代码的可见度分:白盒测试、黑盒测试(只管输入是否输出)、灰盒测试
1.3 根据软件的测试面分:功能测试、性能测试
1.4 软件测试的周期
冒烟测试:对一个新版本在进行大规模测试之前,先验证一下基本功能是否实现。
回归测试:修改旧代码之后
随机测试:测试中所有输入的数据都是随机生成的,其目的是为了模拟真实的用户操作。
探索性测试:
安全性测试:
2、安装自动化测试工具
2.1 安装
2.2 安装webdriver驱动
3、webdriver API
3.1 从定位元素开始
3.1.1, id定位
def find_elements_by_id(self, id_):
"""
Finds multiple elements by id.
:Args:
- id\_ - The id of the elements to be found.
:Returns:
- list of WebElement - a list with elements if any was found. An
empty list if not
:Usage:
elements = driver.find_elements_by_id('foo')
"""
return self.find_elements(by=By.ID, value=id_)
3.1.2name定位
3.1.3,class定位
3.1.4,tag定位
3.1.5,link定位
3.1.6,xpath定位(重要)
3.1.7, css定位
3.2 控制浏览器
3.2.1 控制浏览器窗口大小
driver.set_window_size(400,600)
或者
driver.maxmize_window()
注意点:set_window_size需要指定宽高
maxmize_window不需要指定任何参数,一般情况下,PC端需要全屏展示。
3.2.2,控制浏览器前进与后退
(1)切换操作句柄:
获取当前页面的句柄:driver.current_window_handle
获取当前所以的句柄:window_handles
六、参考代码
# coding:utf-8
from selenium import webdriver
driver = webdriver.Firefox()
driver.get("http://bj.ganji.com/")
h = driver.current_window_handle
print h # 打印首页句柄
driver.find_element_by_link_text("招聘求职").click()
all_h = driver.window_handles
print all_h # 打印所有的句柄
# 方法一:判断句柄,不等于首页就切换
# for i in all_h: # 这里不建议用for循环了,很多小伙伴懵的
# if i != h:
# driver.switch_to.window(i)
# print driver.title
# 方法二:获取list里面第二个直接切换
driver.switch_to.window(all_h[1])
print driver.title
# 关闭新窗口
driver.close()
# 切换到首页句柄
driver.switch_to.window(h)
# 打印当前的title
print driver.title
(2)前进与后退:
前进:driver.forward()
后退:driver.back()
(3)页面刷新
driver.refresh()
3.3,iframe(重要) 嵌套
用于爬虫
切入和切出
switch_to_frame(‘id-name’)
https://blog.csdn.net/minzhung/article/details/102743347?utm_medium=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.edu_weight&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.edu_weight
3.4 获取当前页面上所有的数据:
print(driver.page_source)
3.5,后台管理站点模型展示admin
from django.contrib import admin
from webtest.models import WeBcase,Webcasestep
class WebcaseAdmin(admin.ModelAdmin):#webcaseadmin继承modeladmin
list_display=['id','webcasename','webtestresult','webtest','creat_time']
admin.site.register(Webcase,WebAdmin)
class Webcasestep(admin.ModelAdmin):
list.display=['webcasestep','webtestobjname','web']
rest_fremwork的安装pip install
3.6外键相关模型在后台管理站点的展示(测试用例)
3.7,获取文本数据
3.8,鼠标事件
3.9,等待(显示等待和隐示等待)
为了脚本的稳定性。
显示等待:指定某一个条件成立才执行。
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_condition as es
隐示等待:
4,
5,unittest
runttest.py
#构造测试集
if __name__="__main__"
#todo 执行测试
#runner=unittest.TextTestRunner
邮件发送:
https://www.cnblogs.com/yufeihlf/p/5726619.html
python发邮件需要掌握两个模块的用法,smtplib和email,这俩模块是python自带的,只需import即可使用。smtplib模块主要负责发送邮件,email模块主要负责构造邮件。1.smtplib模块
smtplib使用较为简单。以下是最基本的语法。
导入及使用方法如下:
[](javascript:void(0)😉
import smtplib
smtp = smtplib.SMTP()
smtp.connect('smtp.163.com',25)
smtp.login(username, password)
smtp.sendmail(sender, receiver, msg.as_string())
smtp.quit()
[](javascript:void(0)😉
说明:
smtplib.SMTP():实例化SMTP()
connect(host,port):
host:指定连接的邮箱服务器。常用邮箱的smtp服务器地址如下:
新浪邮箱:smtp.sina.com,新浪VIP:smtp.vip.sina.com,搜狐邮箱:smtp.sohu.com,126邮箱:smtp.126.com,139邮箱:smtp.139.com,163网易邮箱:smtp.163.com。
port:指定连接服务器的端口号,默认为25.
login(user,password):
user:登录邮箱的用户名。
password:登录邮箱的密码,像笔者用的是网易邮箱,网易邮箱一般是网页版,需要用到客户端密码,需要在网页版的网易邮箱中设置授权码,该授权码即为客户端密码。
sendmail(from_addr,to_addrs,msg,…):
from_addr:邮件发送者地址
to_addrs:邮件接收者地址。字符串列表[‘接收地址1’,‘接收地址2’,‘接收地址3’,…]或’接收地址’
msg:发送消息:邮件内容。一般是msg.as_string():as_string()是将msg(MIMEText对象或者MIMEMultipart对象)变为str。
quit():用于结束SMTP会话。
2.email模块
email模块下有mime包,mime英文全称为“Multipurpose Internet Mail Extensions”,即多用途互联网邮件扩展,是目前互联网电子邮件普遍遵循的邮件技术规范。
该mime包下常用的有三个模块:*text**,image,*multpart。
导入方法如下:
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.image import MIMEImage
构造一个邮件对象就是一个Message
对象,如果构造一个MIMEText
对象,就表示一个文本邮件对象,如果构造一个MIMEImage
对象,就表示一个作为附件的图片,要把多个对象组合起来,就用MIMEMultipart
对象,而MIMEBase
可以表示任何对象。它们的继承关系如下:
Message
+- MIMEBase
+- MIMEMultipart
+- MIMENonMultipart
+- MIMEMessage
+- MIMEText
+- MIMEImage
3.文字,html,图片,附件实现实例
#coding: utf-8
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.image import MIMEImage
from email.header import Header
#设置smtplib所需的参数
#下面的发件人,收件人是用于邮件传输的。
smtpserver = 'smtp.163.com'
username = 'XXX@163.com'
password='XXX'
sender='XXX@163.com'
#receiver='XXX@126.com'
#收件人为多个收件人
receiver=['XXX@126.com','XXX@126.com']
subject = 'Python email test'
#通过Header对象编码的文本,包含utf-8编码信息和Base64编码信息。以下中文名测试ok
#subject = '中文标题'
#subject=Header(subject, 'utf-8').encode()
#构造邮件对象MIMEMultipart对象
#下面的主题,发件人,收件人,日期是显示在邮件页面上的。
msg = MIMEMultipart('mixed')
msg['Subject'] = subject
msg['From'] = 'XXX@163.com <XXX@163.com>'
#msg['To'] = 'XXX@126.com'
#收件人为多个收件人,通过join将列表转换为以;为间隔的字符串
msg['To'] = ";".join(receiver)
#msg['Date']='2012-3-16'
#构造文字内容
text = "Hi!\nHow are you?\nHere is the link you wanted:\nhttp://www.baidu.com"
text_plain = MIMEText(text,'plain', 'utf-8')
msg.attach(text_plain)
#构造图片链接
sendimagefile=open(r'D:\pythontest\testimage.png','rb').read()
image = MIMEImage(sendimagefile)
image.add_header('Content-ID','<image1>')
image["Content-Disposition"] = 'attachment; filename="testimage.png"'
msg.attach(image)
#构造html
#发送正文中的图片:由于包含未被许可的信息,网易邮箱定义为垃圾邮件,报554 DT:SPM :<p><img src="cid:image1"></p>
html = """
<html>
<head></head>
<body>
<p>Hi!<br>
How are you?<br>
Here is the <a href="http://www.baidu.com">link</a> you wanted.<br>
</p>
</body>
</html>
"""
text_html = MIMEText(html,'html', 'utf-8')
text_html["Content-Disposition"] = 'attachment; filename="texthtml.html"'
msg.attach(text_html)
#构造附件
sendfile=open(r'D:\pythontest\1111.txt','rb').read()
text_att = MIMEText(sendfile, 'base64', 'utf-8')
text_att["Content-Type"] = 'application/octet-stream'
#以下附件可以重命名成aaa.txt
#text_att["Content-Disposition"] = 'attachment; filename="aaa.txt"'
#另一种实现方式
text_att.add_header('Content-Disposition', 'attachment', filename='aaa.txt')
#以下中文测试不ok
#text_att["Content-Disposition"] = u'attachment; filename="中文附件.txt"'.decode('utf-8')
msg.attach(text_att)
#发送邮件
smtp = smtplib.SMTP()
smtp.connect('smtp.163.com')
#我们用set_debuglevel(1)就可以打印出和SMTP服务器交互的所有信息。
#smtp.set_debuglevel(1)
smtp.login(username, password)
smtp.sendmail(sender, receiver, msg.as_string())
smtp.quit()