We live in changeable world, and our applications are also very inconstant. As a result we have to know how to improve project quality. The subject of my presentation is related to the modern approaches of designing and implementing automated functional tests, by using, for instance, design patterns, improving test execution time based parallel execution, scaling by distributing tests on several machines, creating strategy for generation of big sets of test data and setup skeleton for organizing tests for typical Django project. I am pleased to share with you my acquired experience in this field.
В процессе рекрутинга каждый из нас сталкивается с одними и теми же проблемами, когда время закрытия вакансии, мягко говоря, вводит заказчика в ступор, в результате - бизнес стоит, вакансия теряет актуальность, а рекрутер плохо выполняет свою работу. У каждого из нас есть отговорки на все случаи жизни: рынок узкий, требования высокие и т.д., и т.п...
В своем докладе мы посмотрим на это с другой стороны, возможно, мы как рекрутеры не все сделали для того, чтобы закрыть вакансию. Мы сравним IT рынок 4 стран, расскажем о реальных отличиях рекрутинга на аутсорс и на продукт. Мы разберем различные кейсы, обобщим опыт и успешные практики, которые помогают закрыть вакансию, и надеемся, предложим работающие для вас методы, которыми вы раньше не пользовались.
We live in changeable world, and our applications are also very inconstant. As a result we have to know how to improve project quality. The subject of my presentation is related to the modern approaches of designing and implementing automated functional tests, by using, for instance, design patterns, improving test execution time based parallel execution, scaling by distributing tests on several machines, creating strategy for generation of big sets of test data and setup skeleton for organizing tests for typical Django project. I am pleased to share with you my acquired experience in this field.
В процессе рекрутинга каждый из нас сталкивается с одними и теми же проблемами, когда время закрытия вакансии, мягко говоря, вводит заказчика в ступор, в результате - бизнес стоит, вакансия теряет актуальность, а рекрутер плохо выполняет свою работу. У каждого из нас есть отговорки на все случаи жизни: рынок узкий, требования высокие и т.д., и т.п...
В своем докладе мы посмотрим на это с другой стороны, возможно, мы как рекрутеры не все сделали для того, чтобы закрыть вакансию. Мы сравним IT рынок 4 стран, расскажем о реальных отличиях рекрутинга на аутсорс и на продукт. Мы разберем различные кейсы, обобщим опыт и успешные практики, которые помогают закрыть вакансию, и надеемся, предложим работающие для вас методы, которыми вы раньше не пользовались.
WebDriver API is designed to be abstract enough. That is why it usually needs exdending when it comes to using Selenium in practice. If using API out of the box it leads to code duplicates and finding solutions for similar goals every time since it privides only basic classes such as WebDriver or WebElement. Webium library helps you to extend Web Driver API to whatever deep UI object structure you need. You can describe basic UI elements (e.g. Link, Button, Input), construct more complex elements from smaller parts and eventually put them all into your Page Objects. Webium is free and open-source. In my talk I'll explain how to use it efficiently in case you use or are going to use Python + Selenium for writing tests.
Out-of-the-box WebDriver API provides two main classes: WebDriver and WebElement. Webium library helps you to extend it to whatever deep UI object structure you need. You can describe basic elements (e.g. Button, Input), construct complex elements (e.g. Calendar) from small pieces and at the end put it all together into your Page Objects. Webium is free and open-source. In my speech I’ll present your how to use it effectively if you want to write Selenium tests in Python.
WebDriver API is designed to be abstract enough. That is why it usually needs exdending when it comes to using Selenium in practice. If using API out of the box it leads to code duplicates and finding solutions for similar goals every time since it privides only basic classes such as WebDriver or WebElement. Webium library helps you to extend Web Driver API to whatever deep UI object structure you need. You can describe basic UI elements (e.g. Link, Button, Input), construct more complex elements from smaller parts and eventually put them all into your Page Objects. Webium is free and open-source. In my talk I'll explain how to use it efficiently in case you use or are going to use Python + Selenium for writing tests.
Out-of-the-box WebDriver API provides two main classes: WebDriver and WebElement. Webium library helps you to extend it to whatever deep UI object structure you need. You can describe basic elements (e.g. Button, Input), construct complex elements (e.g. Calendar) from small pieces and at the end put it all together into your Page Objects. Webium is free and open-source. In my speech I’ll present your how to use it effectively if you want to write Selenium tests in Python.
7. autowireautowire
trait Api {
def order(itemIds: List[Int]): Order
def submit(order: Order): Unit
}
val client = Ajax[Api]
val z: Future[Unit] = for {
order <- client.order(itemIds).call()
result <- client.submit(order).call()
} yield result
9. scala-js-reactscala-js-react
@scalax
def render(self: This) = {
val todo = self.state.todos.count(!_.completed)
<section id="todoapp">
<header id="header">
<h1>todos</h1>
<input id="new-todo"
onChange={self.onChange}
onKeyUp={self.onKeyPress}
value={self.state.text}
placeholder="What needs to be done?"
autofocus={true}></input>
</header>
</section>
}
10. scodecscodec
case class Person(name: String, title: String)
object Person {
implicit val codec = Codec[Person]
}
sealed trait Tree
case class Node(l: Tree, r: Tree) extends Tree
case class Leaf(n: Int) extends Tree
object Tree {
implicit lazy val codec: Codec[Tree] = {
discriminated[Tree]
.by(uint8)
.typecase2(0, int32.as[Leaf])
.typecase2(1, lazily { (codec :: codec).as[Node] })
}
}
13. АА такжетакже
поддержка IDE
инкрементальная компиляция
source maps
Google Closure Compiler
размеры JS
минимум - 100 Кб
TODO MVC - 250 Кб (64 Kb gzip) + react
максимум - 1Mb
14. ЗаключениеЗаключение
Можно скомпилировать Scala в JS
Scala код можно звать из JS, и наоборот
Производительность сопоставима с JS
Есть много библиотек
Можно все написать на ScalaJS :)
Есть альтернативы, см. Haskell, Erlang, Clojure