Selenium3+Pytest+Allure落地Python Web自动化测试完结无密

#1

download:Selenium3+Pytest+Allure落地Python Web自动化测试完结无密

小微企业跨组织人才管理系统
介绍
因为前期比较懒,把竞赛题的分析交给了文的同学,导致分析不到位,有点跑题。幸运的是,这不是一个大问题。
前期打算用ssm做框架。中间阶段在一本书上发现了一个用jsp写的模板,就直接复制了。
后期为了增加ajax、拦截器、文件上传下载功能,加入了SpringMVC架构。
因此,这四个不同点就产生了,用的是SpringMVC架构,而JDBC…,
总而言之,我还是没经验,见风使舵!

项目代码
下面将展示部分代码,源代码可以在这里下载,
1.拦截机
它旨在通过直接输入地址来防止访问和分级权限管理。结果没用,还是写了。…
公共类LoginInterceptor实现HandlerInterceptor {

public boolean pre handle(http servlet request请求、HttpServletResponse响应、对象处理程序)引发ServletException、IOException {
//如果是登录页面,就发布。
system . out . println(" uri:"+request . getrequest uri());
if (request.getRequestURI()。包含(“登录”){
返回true
}

if (request.getRequestURI()。包含(“验证”){
返回true
}

http session session = request . getsession();

//如果用户已经登录,则释放它。
if(((String)session . get attribute(" validated “))。等于(” ok")) {
返回true
}

返回false
}
}
复制代码
2.文件上传和下载
本来以为程序会根据当前员工的编号,自动更改上传文件的文件名,然后保存。这种情况下,浏览或下载文件也可以直接根据员工号作为文件名进行搜索。但是,为了方便起见,这里没有体现。它只是一个正常的文件上传和下载功能。
文件上传
@ request mapping("/郭城")
公共字符串fileUpload2(@RequestParam(“郭城”)CommonsMultipartFile文件,HttpServletRequest请求)抛出IOException {

//上传保存设置的路径
路径=请求;getservletcontext();get real path("/work product ");
File realPath =新文件(路径);
如果(!realPath.exists()){
real path . mkdir();
}
//上传文件地址
System.out.println(“上传文件的保存地址:”+realPath);

//直接用CommonsMultipartFile的方法写文件(这次注意)
file.transferTo(新文件(real path+"/"+File . getoriginalfilename()));

Return “window.alert(‘上传成功!’)” +
" history . back()";
}
复制代码
下载文件
@ request mapping(value = "/download CG “)
公共字符串downloads1(HttpServletResponse响应,HttpServletRequest请求)引发异常{
//要下载的图片的地址
路径=请求;getservletcontext();get real path(”/work product ");
String fileName = " 1234567.pdf

//1.设置响应头
response . reset();//设置不缓存页面,清空缓冲区
response . setcharacterencoding(" UTF-8 “);//字符编码
response . set content type(” multipart/form-data “);//二进制传输数据
//设置响应头
response.setHeader(“内容-处置”,
“附件;fileName=”+ URLEncoder.encode(文件名," UTF-8 "));

File file =新文件(路径,文件名);
//2.读取文件输入流
InputStream input = new file InputStream(file);
//3,写出文件输出流
output stream out = response . get output stream();

byte[]buff =新字节[1024];
int index = 0;
//4,执行写出操作。
while((index= input.read(buff))!= -1){
out.write(buff,0,index);
out . flush();
}
out . close();
input . close();
返回null
}
复制代码
3.添加、删除和检查
本来这里如果有SSM架构的话,数据库用mybatis写会更方便,但是用了模板,所以用了JDBC,造成了很多代码冗余。这里只选取片段展示。这是用jsp写的代码块。

String BH =(String)session . get attribute(" zgbh “);
尝试{
class . forname(” com . MySQL . JDBC . driver “)。new instance();
string URL = " JDBC:MySQL://localhost:3307/rsgl?use SSL = false & use unicode = true & character encoding = UTF-8 “;
String user = " root
String password = " 123456
connection conn = driver manager . getconnection(URL,user,password);
String sql = “select * from zgb,bmb,jlb,users” +
“其中zgb.bm = bmb.bmbh和zgb.bh=jlb.zgbh和zgb.bh=users.username和bh=?”+
”由bh订购”;
string SQL 1 = " insert into checkb(BH,xm,xb,bm,csrq,jbgz,gwjt,gwpj,jzjl,zwpj,password,usertype) " +
“价值观(?,?,?,?,?,?,?,?,?,?,?,?)”;
string SQL 2 = " delete from zgb where BH =?”;
string SQL 3 = " delete from jlb where zgbh =?";
String sql4 = “从用户名=的用户中删除?”;

prepared statement pstmt = conn . prepare statement(SQL);
pstmt.setString(1,BH);
ResultSet rs0 = pstmt . execute query();
SimpleDateFormat SDF = new SimpleDateFormat(" yyyy-MM-DD ");
rs0 . next();
String xm0 = rs0.getString("xm ")。trim();
String xb0 = rs0.getString("xb ")。trim();
String bm0 = rs0.getString("bmmc “)。trim();
string csrq 0 = SDF . format(rs0 . getdate(” csrq “));
string jbgz 0 = string . value of(rs0 . get float(” jbgz “));
string gwjt 0 = string . value of(rs0 . get float(” gwjt “));
string jzjl 0 = rs0 . getstring(” jzjl “)。trim();
string gwpj 0 = rs0 . getstring(” gwpj “)。trim();
string zwpj 0 = rs0 . getstring(” zwpj “)。trim();
string pwd 0 = rs0 . getstring(” password “)。trim();
string type 0 = rs0 . getstring(” usertype ")。trim();
rs0 . close();

PS TMT = conn . prepare statement(SQL 1);
pstmt.setString(1,BH);
pstmt.setString(2,xm0);
pstmt.setString(3,xb0);
pstmt.setString(4,bm0);
pstmt.setString(5,csrq 0);
pstmt.setString(6,jbgz 0);
pstmt.setString(7,gwjt 0);
pstmt.setString(8,gwpj 0);
pstmt.setString(9,jzjl 0);
pstmt.setString(10,zwpj 0);
pstmt.setString(11,pwd 0);
pstmt.setString(12,type 0);
PS TMT . execute update();

PS TMT = conn . prepare statement(SQL 2);
pstmt.setString(1,BH);
int n1 = PS TMT . execute update();

PS TMT = conn . prepare statement(SQL 3);
pstmt.setString(1,BH);
int N2 = PS TMT . execute update();

PS TMT = conn . prepare statement(SQL 4);
pstmt.setString(1,BH);
int n3 = PS TMT . execute update();
if (n1>0 && n2>0 && n3>0){
%>
Window.alert(‘成功删除员工记录!’)
window . location = " $ { pagecontext . request . context path }/HR/all list "

}否则{
%>
Window.alert(‘员工记录删除失败!’)
history.back()

}
pstmt . close();
conn . close();
} catch(异常e){
out . print(e . tostring());
}
%>
复制代码
上面这段代码的主要作用是,当HR选择删除一个员工时,首先将该员工的所有信息插入到一个checkb表中。此表中的员工全部被HR辞退,最终会出现在领导的管理系统中。如果领导不同意辞退该员工,那么他的数据会被重新插入到所有的原始表中,也就是实现了恢复该员工的功能,同时checkb表中该员工的记录也会被删除。如果领导同意辞退,直接放在checkb。
之所以用三个delete语句,是因为一个delete语句删除三个表,总是给我一个错误。为了不纠结这个问题,我把它们分开写了,总之,

摘要
不请自来的五人团队第一次参加服务外包创新大赛。由于经验不足,我们一路跌跌撞撞,但幸运的是,我们的团队来了,坚持下来了。

由于知识储备不足,第一要务是完成项目,所以选择了A01竞赛题。当我写完的时候,我意识到这有点简单,但是无伤大雅。